您的位置:首页 > 运维架构 > 反向代理

Nginx反向代理配置

2020-02-25 17:59 120 查看

Nginx反向代理

**概念:**反向代理(Reverse Proxy)方式是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器;并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
**案例:**使用Nginx实现Web反向代理功能,实现如下功能:
后端Web服务器两台,可以使用httpd实现
Nginx采用轮询的方式调用后端Web服务器
两台Web服务器的权重要求设置为不同的值
最大失败次数为1,失败超时时间为30秒
需要准备:4台RHEL7虚拟机,其中一台作为Nginx代理服务器,该服务器需要配置两块网卡,IP地址分别为192.168.4.5和192.168.2.5,两台Web服务器IP地址分别为192.168.4.100和192.168.4.200。客户端测试主机IP地址为192.168.4.10
Ngin目前支持的调度算法:
-轮询(默认的):逐一循环调度
-weight:指定轮询几率,权重值和访问比率成正比
-ip_hash:根据客户端ip分配固定的后端服务器
服务器组主机状态:
-down:表示当前server暂时不参与负载
-max_fails:允许请求失败的次数(默认为1)
-fail_timeout:max_fails次失败后,暂停提供服务的时间

**步骤一:部署实施后端Web服务器

1)部署后端Web1服务器**
后端Web服务器可以简单使用yum方式安装httpd实现Web服务,为了可以看出后端服务器的不同,可以将两台后端服务器的首页文档内容设置为不同的内容。
[root@web1 ~]# yum  -y  install  httpd
[root@web1 ~]# echo "192.168.4.100" > /var/www/html/index.html
[root@web1 ~]# systemctl restart httpd
**2)部署后端Web2服务器**
[root@web2 ~]# yum  -y  install  httpd
[root@web2 ~]# echo "192.168.4.200" > /var/www/html/index.html
[root@web2 ~]# systemctl restart httpd

**步骤二:配置Nginx服务器,添加服务器池,实现反向代理功能

1)修改/usr/local/nginx/conf/nginx.conf配置文件**
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
.. ..
http {
.. ..
#使用upstream定义后端服务器集群,集群名称任意(如webserver)
#使用server定义集群中的具体服务器和端口
upstream webserver {
server 192.168.4.100:80;
server 192.168.4.200:80;
}
.. ..
server {
listen        80;
server_name  localhost;
location / {
#通过proxy_pass将用户的请求转发给webserver集群
proxy_pass http://webserver;
}
}
**2)重新加载配置**
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
**3)客户端使用浏览器访问代理服务器测试轮询效果**
[root@client ~]# curl http://192.168.4.5            #使用该命令多次访问查看效果
[root@client ~]# curl http://192.168.4.5           #使用该命令多次访问查看效果

**步骤三:配置upstream服务器集群池属性

1)设置失败次数,超时时间,权重**
weight可以设置后台服务器的权重,max_fails可以设置后台服务器的失败次数,fail_timeout可以设置后台服务器的失败超时时间。
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
.. ..
http {
.. ..
upstream webserver {
server 192.168.4.100 weight=1 max_fails=1 fail_timeout=30;
server 192.168.4.200 weight=2 max_fails=2 fail_timeout=30;
server 192.168.4.101 down;
}
#weight设置服务器权重值,默认值为1
#max_fails设置最大失败次数,测试服务器几次才确认服务器失败
#fail_timeout设置失败超时时间,单位为秒
#down标记服务器已关机,不参与集群调度
.. ..
server {
listen        80;
server_name  localhost;
location / {
proxy_pass http://webserver;
}
}
2)重新加载配置
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
3)关闭一台后端服务器(如web1)
[root@web1 ~]# systemctl stop httpd
4)客户端使用浏览器访问代理服务器测试轮询效果
[root@client ~]# curl http://192.168.4.5           #使用该命令多次访问查看效果
5)再次启动后端服务器的httpd(如web1)
[root@web1 ~]# systemctl start httpd
6)客户端再次使用浏览器访问代理服务器测试轮询效果
[root@client ~]# curl http://192.168.4.5           #使用该命令多次访问查看效果

步骤四:配置upstream服务器集群的调度算法

1)设置相同客户端访问相同Web服务器
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
.. ..
http {
.. ..
upstream webserver {
#通过ip_hash设置调度规则为:相同客户端访问相同服务器
ip_hash;
server 192.168.4.100 weight=1 max_fails=2 fail_timeout=10;
server 192.168.4.200 weight=2 max_fails=2 fail_timeout=10;
}
.. ..
server {
listen        80;
server_name  www.tarena.com;
location / {
proxy_pass http://webserver;
}
}
2)重新加载配置
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
3)客户端使用浏览器访问代理服务器测试轮询效果
[root@client ~]# curl http://192.168.4.5           #使用该命令多次访问查看效果

**Nginx的TCP/UDP调度器**
案例:
使用Nginx实现TCP/UDP调度器功能,实现如下功能:
后端SSH服务器两台
Nginx编译安装时需要使用--with-stream,开启ngx_stream_core_module模块
Nginx采用轮询的方式调用后端SSH服务器
需要使用的模块:
ngx_stream_core_module模块
步骤一:部署支持4层TCP/UDP代理的Nginx服务器

1)部署nginx服务器
编译安装必须要使用--with-stream参数开启4层代理模块。
[root@proxy ~]# cd  nginx-1.12.2
[root@proxy nginx-1.12.2]# ./configure   \
--with-http_ssl_module        \                        		#开启SSL加密功能
--with-stream                                       				#开启4层反向代理功能
[root@proxy nginx-1.12.2]# make && make install         	#编译并安装

步骤二:配置Nginx服务器,添加服务器池,实现TCP/UDP反向代理功能

1)修改/usr/local/nginx/conf/nginx.conf配置文件
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
stream {
upstream backend {
server 192.168.4.100:22;            		#后端SSH服务器的IP和端口
server 192.168.4.200:22;
}
server {
listen 12345;                   				 #Nginx监听的端口
proxy_pass backend;
}
}
http {
.. ..
}
2)重新加载配置
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
3)客户端使用访问代理服务器测试轮询效果
[root@client ~]# ssh 192.168.4.5 -p 12345           		 #使用该命令多次访问查看效果
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: