| Nginx的反向代理nginx的第二大功能:代理(帮客户主机找到相应的web服务器) 作为代理服务器时有两大功能: 调度器(轮询算法),负载均衡,满足更大的并发量健康检查(智能判断某个服务器是否能够提供服务),网站高可用
 一.需求:使用nginx实现web反向代理功能,实现如下功能: 后端web服务器两台,可是使用httpd实现nginx采用轮询的方式调用后端web服务器两台web服务器的权重要求设置为不同的值最大失败次数为1,失败超时时间为30s
 二.方案:使用4台虚拟机,其中一台作为nginx代理服务器,该服务器需要配置两块网卡。IP地址分别为192.168.19.100和192.168.20.100,两台web服务器地址为192.168.20.30和192.168.20.40,客户端测试主机IP地址为192.168.19.1。(IP可以发生改变,只要符合web服务器和测试机不在同一个网段即可) ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5rBnrQCi-1630683600700)(E:\Typort\image-20210901170135700.png)]](https://img-blog.csdnimg.cn/b8fe2e8476394316bf1b195fb8da8b30.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAaGFoYXhpeGkxMzE=,size_20,color_FFFFFF,t_70,g_se,x_16)
 | 主机 | ip | 
|---|
 | 测试机 | 192.168.19.1 |  | nginx代理 | eth0 192.168.19.100 |  |  | ehh1 192.1688.20.100 |  | web1 | 192.168.20.30 |  | web2 | 192.168.20.40 | 
 三.步骤1.先部署后端web服务器在两台web服务器上安装httpd
web1
yum -y install httpd
echo "this 192.168.20.30" >/var/www/html/index.html
systemctl restart httpd
firewall-cmd --set-default-zone=trusted 
setenforce 0
web2
yum -y install httpd
echo "this 192.168.20.40" >/var/www/html/index.html
systemctl restart httpd
firewall-cmd --set-default-zone=trusted 
setenforce 0
 2.配置nginx服务器,添加服务器池,实现反向代理功能1)修改/usr/local/nginx/conf/nginx.conf vim /usr/local/nginx/conf/nginx.conf
....
upstream webserver{
        server 192.168.20.30:80;  
        server 192.168.20.40:80;
}
server {
        listen       80;
        server_name  www.a.com;
        location / {
        
          proxy_pass http://webserver;
          root html;
          index index.html index.htm;
        }
}
...
重启服务
/usr/local/nginx/sbin/nginx -s reload
 开始测试(验证负载均衡) ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QOArqnB2-1630683600703)(E:\Typort\image-20210901173532636.png)]](https://img-blog.csdnimg.cn/d0c5eedb2e8d4e92932174bd323f991b.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAaGFoYXhpeGkxMzE=,size_14,color_FFFFFF,t_70,g_se,x_16)
 验证(健康检查) 我们可以先关闭某一个web服务器,再次访问,看是否轮询,或者报错
web1
systemctl stop httpd
 ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3WkQYBe1-1630683600705)(E:\Typort\image-20210901173951130.png)]](https://img-blog.csdnimg.cn/3366a90ef0ae47c5a9aa69192f1e0b2b.png)
 再次启动服务,动态查看nginx健康检查
web1
systemctl restart httpd
在次测试
 ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gW94CJTy-1630683600707)(E:/Typort/image-20210901181459587.png)]](https://img-blog.csdnimg.cn/2975b5733cec4e4aa117ecb445891217.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAaGFoYXhpeGkxMzE=,size_13,color_FFFFFF,t_70,g_se,x_16)
 3.配置upstream服务器集群池属性1)设置失败次数,超时时间,权重 weight:设置服务器权重值,权重默认为1max_fails设置最大失败次数fail_timeout:设置失败超时时间,单位为秒down: 标记服务器已关机,不参与集群调度长时间不能恢复使用down,短时间可以使用fail——timeout,权重越高,服务器越繁忙
 vim /usr/local/nginx/conf/nginx.conf
...
http {
  ...
upstream webserver{
        server 192.168.20.30:80 weight=1 max_fails=1 fail_timeout=30;
        server 192.168.20.40:80 weight=2 max_fails=1 fail_timeout=30;
        server 192.168.20.50:80 weight=2 max_fails=1 fail_timeout=30 down;
}
server {
        listen       80;
        server_name  www.a.com;
        location / {
        proxy_pass http://webserver;
        root html;
        index index.html index.htm;
        }
}
}
重启服务
/usr/local/nginx/sbin/nginx -s reload
 4.配置upstream服务器集群的调度算法1)相同客户端访问相同web服务器 ![### [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y4NCICwn-1630683600709)(E:/Typort/image-20210901184304657.png)]](https://img-blog.csdnimg.cn/1ffce397cbd04064b1ab41a5de76f87b.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAaGFoYXhpeGkxMzE=,size_20,color_FFFFFF,t_70,g_se,x_16)
 客户端登录web服务器,如果刷新,因为轮询算法,所以要重新登录 2)解决方案: 修改默认算法,修改为 ip_hash vim /usr/local/nginx/conf/nginx.conf
....
upstream webserver{
		ip_hash;
		#通过ip_hash设置调度规则为:相同客户端访问相同的服务器
        server 192.168.20.30:80;  #使用server定义集群中的具体服务器和端口
        server 192.168.20.40:80;
}
server {
        listen       80;
        server_name  www.a.com;
        location / {
          proxy_pass http://webserver;
          root html;
          index index.html index.htm;
        }
}
...
重启服务
/usr/local/nginx/sbin/nginx -s reload
 客户端测试ip_hash的效果 ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sK6bs86w-1630683600710)(E:/Typort/image-20210901185309407.png)]](https://img-blog.csdnimg.cn/f92fe2d4f0994be1a90d6f20e742197d.png)
 Nginx的TCP/UDP调度器一、需求使用Nginx实现tcp/udp调度器功能,实现如下功能: 后端ssh服务器两台nginx编译安装时需要使用–with-stream,开启ngx_stream_core_module模块nginx采用轮询的方式调用后端ssh服务器
 二、方案使用4台虚拟机,其中一台作为nginx代理服务器,该服务器需要配置两块网卡,IP地址分别为192.168.19.100和192.168.20.100 | 主机 | ip | 
|---|
 | 测试机 | 192.168.19.1 |  | nginx代理 | eth0 192.168.19.100 |  |  | ehh1 192.1688.20.100 |  | ssh1 | 192.168.20.30 |  | ssh2 | 192.168.20.40 | 
 nginx可以做其他服务的代理 要实现Nginx对TCP/UDP的调度,需要安装以下模块 模块 ngx_stream_core_module模块使用–with-stream开启该模块注意:nginx从1.9版本才开始支持该功能
 三、步骤1.部署支持四层TCP/UDP代理的Nginx服务器1)编译安装必须使用–with-stream参数开启四层代理模块 为了没有一些小问题,建议重装nginx,卸载之前的nginx,当然也可以使用nginx的升级来完成
/usr/local/nginx/sbin/nginx -s stop  
rm -rf /usr/local/nginx
重装
yum -y install gcc pcre-devel openssl-devel
useradd -s /sbin/nologin nginx  
上传相应的软件包到服务器上,并进行解压安装
tar -xf nginx-1.20.1.tar.gz 
cd nginx-1.20.1/
./configure \
 --prefix=/usr/local/nginx \  
 --user=nginx \               
 --group=nginx \            
 --with-http_ssl_module \       
 --with-stream               
 make && make install
 2.配置Nginx服务器,添加服务器池,实现TCP/UDP的反向代理功能1)修改nginx的配置文件 vim /usr/local/nginx/conf/nginx.conf
....
stream {
   upstream backup {
    server 192.168.20.30:22;  
    server 192.168.20.40:22;
        }
    
    server {
        listen 2000;   
        proxy_pass backup;  
        proxy_timeout 3s;
        proxy_connect_timeout 1s;  
        }
}
http {
....
重新加载配置文件确保刚才的配置生效
/usr/local/nginx/sbin/nginx -s reload
 测试: 在远程连接时,要加上相应的端口,来实现nginx的代理,如果不输入,默认连接nginx服务器 ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oIQJPbJH-1630683600711)(E:/Typort/image-20210903110058047.png)]](https://img-blog.csdnimg.cn/11fe99c683044e5ca59beab7cbbe726a.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAaGFoYXhpeGkxMzE=,size_20,color_FFFFFF,t_70,g_se,x_16)
 ut 1s; #连接的超时时间}
 }
 #在HTTP之前加入,一般在20行
 http {
 …
 重新加载配置文件确保刚才的配置生效
 /usr/local/nginx/sbin/nginx -s reload
 
测试:
在远程连接时,要加上相应的端口,来实现nginx的代理,如果不输入,默认连接nginx服务器
[外链图片转存中...(img-oIQJPbJH-1630683600711)]
 |