Nginx反向代理-负载均衡
同一个资源多次请求,可能会到达不同的服务器上,导致不必要的多次下载,缓存命中率不高,以及一些资源时间的浪费。在多个服务器的情况下,我们将请求发放到各个服务器上,将原先请求集中到单个服务器的情况改为将请求发送到多个服务器上,将负载分发到不同的服务器,也就是负载均衡。使用ip_hash指令无法保证后端服务器的负载均衡,可能导致有些后端服务器接收到的请求多,有些后端服务器接收的请求少,而且设置后端服务器
Nginx反向代理-负载均衡
nginx是什么?
- Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名!能够支持高达 50,000 个并发连接数的响应。
- Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。
nginx的作用
反向代理
正向代理:正向代理就是在客户端配置代理服务器,通过代理服务器去进行互联网操作。例如:使用VPN上网。
反向代理:客户端发送请求到反向代理服务器,由反向代理服务器去选择目标服务器获取它的数据,在返回给客户端。此时反向代理服务器和目标服务器对外就是一台服务器,暴露的是代理服务器地址,隐藏了真实的服务器地址。当代理为服务端服务时,该代理就是反向代理。
配置反向代理
将请求转发到单个后端服务器
upstream tomcat-portal {
server 192.168.25.141:8080;
}
server {
listen 80;
server_name www.pinyougou.com;
location / {
proxy_pass http://tomcat-portal;
index index.html;
}
}
将请求转发到多个后端服务器,并实现负载均衡
upstream tomcat-portal {
server 192.168.25.141:8080;
server 192.168.25.141:8180;
server 192.168.25.141:8280;
}
server {
listen 80;
server_name www.pinyougou.com;
location / {
proxy_pass http://tomcat-portal;
index index.html;
}
}
反向代理的作用
1、保证各种服务在内网的安全,防止web攻击,大型网站,通常将反向代理服务器作为公网访问地址,各种服务则处于内网之中。
2、负载均衡,反向代理服务器选择合适的服务进行请求,实现流量的负载均衡。
3、限流,当流量实在过大时,机器无法负载的情况下,反向代理服务器可以限制一部分流量请求服务(让请求失败)。
4、数据预处理,处理请求的数据,让服务端能够识别,以及在服务端的响应数据中添加或者删除一些数据等。
Nginx的安装(Centos7)
1 .安装编译环境
#安装编译环境
[root@localhost /]# yum install -y gcc gcc-c++
2 .安装pcre库、zlib库和openssl库
pcre(Perl Compatible Regular Expressions)是一个Perl库,是一个用C语言编写的正则表达式的函数库,是轻量级的函数库。nginx的http模块使用pcre来解析正则表达式,所以需要在linux上安装pcre库
zlib是一套通用的解压缩开源库,提供了内存(in-memory)压缩和解压函数,能检测解压出来的数据完整性。nginx使用zlib对http包的内容进行gzip,所以需要在linux上安装zlib库。
openssl,即open secure sockets layer,是一个开源的安全套接字层的密码库。包括常用的密码加解密算法、常用的密钥算法、证书管理和SSL协议。nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在linux安装openssl库。
#安装pcre库
[root@localhost /]# yum install -y pcre pcre-devel
#安装zlib库
[root@localhost /]# yum install -y zlib zlib-devel
#安装openssl库
[root@localhost /]# yum install -y openssl-devel
3.下载nginx
wget http://nginx.org/download/nginx-1.22.1.tar.gz
4.解压nginx
tar -zvxf nginx-1.22.1.tar.gz
5.编译安装
cd nginx-1.22.1
编译并指定安装位置,执行安装之后会创建指定文件夹home/nginx
./configure --prefix=/home/nginx \
--with-pcre \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_stub_status_module \
--with-http_auth_request_module \
--with-http_image_filter_module \
--with-http_slice_module \
--with-mail \
--with-threads \
--with-file-aio \
--with-stream \
--with-mail_ssl_module \
--with-stream_ssl_module
6.执行编译并安装
make && make install
7.进入指定文件夹home/nginx
查看nginxi目录下的文件
#进入nginx
cd /home/nginx
#查看nginxi目录下的文件
ls -al
8.查看sbin目录下的文件
9.启动nginx
[root@luocheng sbin]# ./nginx
10.查看nginx的状态
[root@luocheng sbin]# ps -ef | grep nginx
11.用本地浏览器服务虚拟机地址
Nginx负载均衡及其策略
负载均衡
在多个服务器的情况下,我们将请求发放到各个服务器上,将原先请求集中到单个服务器的情况改为将请求发送到多个服务器上,将负载分发到不同的服务器,也就是负载均衡。(可以给性能高的服务器多发一些请求、性能低的少发一些请求)
负载均衡策略
目前Nginx服务器的upstream模块支持6种方式的分配:
算法名称 | 说明 |
---|---|
轮询 | 默认方式 |
weight | 权重方式 |
ip_hash | 依据IP分配方式 |
least_conn | 依据最少连接方式 |
url_hash | 依据URL分配方式 |
fair | 依据响应时间方式 |
轮询
是upstream模块负载均衡默认的策略。每个请求会按时间顺序逐个分配到不同的后端服务器。轮询不需要额外的配置。
upstream tomcat-portal {
server 192.168.25.141:8080 weight=1;
server 192.168.25.141:8180;
server 192.168.25.141:8280;
}
server {
listen 80;
server_name www.pinyougou.com;
location / {
proxy_pass http://tomcat-portal;
index index.html;
}
}
weight加权[加权轮询]
weight=number:用来设置服务器的权重,默认为1,权重数据越大,被分配到请求的几率越大;该权重值,主要是针对实际工作环境中不同的后端服务器硬件配置进行调整的,所有此策略比较适合服务器的硬件配置差别比较大的情况
upstream tomcat-portal {
server 192.168.25.141:8080 weight=10;
server 192.168.25.141:8180 weight=5;
server 192.168.25.141:8280 weight=3;
}
server {
listen 80;
server_name www.pinyougou.com;
location / {
proxy_pass http://tomcat-portal;
index index.html;
}
}
ip_hash
当对后端的多台动态应用服务器做负载均衡时,ip_hash指令能够将某个客户端IP的请求通过哈希算法定位到同一台后端服务器上。这样,当来
自某一个IP的用户在后端Web服务器A上登录后,在访问该站点的其他URL,能保证其访问的还是后端web服务器A。
语法 | ip_hash |
---|---|
默认值 | - |
位置 | upstream |
upstream tomcat-portal {
ip_hash;
server 192.168.25.141:8080 ;
server 192.168.25.141:8180 ;
server 192.168.25.141:8280 ;
}
server {
listen 80;
server_name www.pinyougou.com;
location / {
proxy_pass http://tomcat-portal;
index index.html;
}
}
注意:
使用ip_hash指令无法保证后端服务器的负载均衡,可能导致有些后端服务器接收到的请求多,有些后端服务器接收的请求少,而且设置后端服务器权重等方法将不起作用。
least_conn
最少连接,把请求转发给连接数较少的后端服务器。轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least_conn这种方式就可以达到更好的负载均衡效果。
upstream tomcat-portal {
least_conn;
server 192.168.25.141:8080 ;
server 192.168.25.141:8180 ;
server 192.168.25.141:8280 ;
}
server {
listen 80;
server_name www.pinyougou.com;
location / {
proxy_pass http://tomcat-portal;
index index.html;
}
}
url_hash
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,要配合缓存命中来使用。同一个资源多次请求,可能会到达不同的服务器上,导致不必要的多次下载,缓存命中率不高,以及一些资源时间的浪费。而使用url_hash,可以使得同一个url(也就是同一个资源请求)会到达同一台服务器,一旦缓存住了资源,再此收到请求,就可以从缓存中读取。
upstream tomcat-portal {
hash &request_uri;
server 192.168.25.141:8080 ;
server 192.168.25.141:8180 ;
server 192.168.25.141:8280 ;
}
server {
listen 80;
server_name www.pinyougou.com;
location / {
proxy_pass http://tomcat-portal;
index index.html;
}
}
fair
fair采用的不是内建负载均衡使用的轮换的均衡算法,而是可以根据页面大小、加载时间长短智能的进行负载均衡。
upstream tomcat-portal {
fair;
server 192.168.25.141:8080 ;
server 192.168.25.141:8180 ;
server 192.168.25.141:8280 ;
}
server {
listen 80;
server_name www.pinyougou.com;
location / {
proxy_pass http://tomcat-portal;
index index.html;
}
}
换的均衡算法,而是可以根据页面大小、加载时间长短智能的进行负载均衡。
upstream tomcat-portal {
fair;
server 192.168.25.141:8080 ;
server 192.168.25.141:8180 ;
server 192.168.25.141:8280 ;
}
server {
listen 80;
server_name www.pinyougou.com;
location / {
proxy_pass http://tomcat-portal;
index index.html;
}
}
更多推荐
所有评论(0)