梦飞数据中心 > 帮助中心 > 网络技术 > nginx TCP反向代理设置

nginx TCP反向代理设置

nginx从1.9.0开始支持TCP反向代理,之前只支持HTTP。这是我的系统示意图:
 
 
 
为什么需要反向代理?主要是:
 
1)负载均衡
2)方便管控
比如我现在要更新后端服务器,如果不用负载均衡的话,服务器租用、梦飞科技,在更新过程中,用户会出现无法连接服务器的情况,而一旦用了负载均衡,用户此时的连接请求将会分配到别的没在更新的后端服务器去,尽可能地确保了服务的可用性;再考虑这么种情况,我有多个服务器后端,那么就需要打开多个不同的监听端口,我需要在系统防火墙里做多个配置,如果它们与客户端的连接使用了SSL/TLS,那么得给它们各自配置证书,现在用了反向代理的话这些都简化了,服务器只需要打开一个对外监听端口,证书也只需要给反向代理配置好即可,就是我说的方便管控,当然了,还能方便的管控流量,设置一些额外的访问策略什么的。
 
那么反向代理的缺点是什么?我想如果后端多了起来,连接多了起来之后,对nginx来说是一个很大的挑战,毕竟TCP和HTTP不一样,TCP通常是“长连接”,要一直维持着的。到时候如果nginx撑不下去,就考虑用硬件负载均衡吧(不过听说这玩意儿不便宜)。高防服务器租用。
 
安装nginx
安装nginx的旧方法当然是去官网下载tar包,解压缩,configure,make,这里就不描述安装过程了,可以查看梦飞科技官网以前发过的安装Nginx文章。

安装nginx完成后,接下来就需要编辑配置文件了。输入以下命令:
vi /etc/nginx/nginx.conf

找到”backend“这个配置


stream{
    upstream backend{                                                                   1)
        hash $remote_addr consistent;
        server 127.0.0.1:7397 max_fails=3 fail_timeout=10s;           2)
        server 127.0.0.1:7398 max_fails=3 fail_timeout=10s;
    }
 
    server{
        listen 443 ssl;                                                                         3)
        ssl_certificate     /home/guogangj/certs/cert443.pem;           4)
        ssl_certificate_key  /home/guogangj/certs/key443.pem;       5)
        ssl_session_cache    shared:SSL:10m;                                  6)
        ssl_session_timeout  10m;                                                     7)
        ssl_ciphers  HIGH:!aNULL:!MD5;                                           8)
        ssl_prefer_server_ciphers  on;                                                9)
        proxy_connect_timeout 20s;                                                   10)
        proxy_timeout 5m;                                                                   11)
        proxy_pass backend;                                                               12)
    }
}

配置说明:
 
1) 设置一个叫“backend”的后端配置
 
2) 我有两个后端服务器,其中之一监听在7397端口,nginx尝试连接之,(10秒钟为判定失败的时长,这个我暂时也不太明白)最多失败3次,超过则不再重试
 
3) nginx监听在443端口,使用SSL安全连接
 
注意:有必要的话,调整firewalld或iptables来允许这个端口的外部访问,这里是CentOS 7,对firewalld来说,可以添加这样的策略
 
firewall-cmd --zone=public --add-port=1268/tcp --permanent
firewall-cmd --reload
查看一下firewalld的策略列表:
 
firewall-cmd --permanent --zone=public --list-all
4) 所使用的X.509证书文件(PEM格式)。
 
5) 证书私钥文件
 
6) 设置SSL Session Cache使用“shared”方式更有利于提高资源的利用率,“SSL”是给缓存起的名字,你可以改成别的(这个名字如何用我现在不太清楚),“10m”为缓存大小(1M的缓存大约可以存放4000个session)
 
7) SSL Session的失效时间,默认5分钟,我设为10分钟
 
8) 指定SSL加密算法,照写即可
 
9) 更偏向于使用服务器的加密算法
 
10) 指定nginx连接后端服务器超时的时间,指定为20秒
 
11) 距离上一次成功访问(连接或读写)后端服务器的时间超过了5分钟就判定为超时,断开此连接
 
12) 将TCP连接及数据收发转向叫“backend”的后端(这句话很关键)
 
完成
最后改好配置了别忘记重启下nginx哦:
 
#systemctl restart nginx

(责任编辑:joker) 部分网站内容及图片来源于网络,如有侵权或违规内容请联系管理员删除!