阿里云ECS配置nginx突破最大转发端口数量,避免time_wait过多造成端口耗尽

/ 运维 / 没有评论 / 639浏览

1.注意

(1)nginx作为反向代理服务器时,转发到后端服务时,通过命令netstat -nao可知,Foreign Address外部地址为127.0.0.1:xx(由于始终是127.0.0.1本地ip不变,本地端口变化,但是转发目标后端的ip和端口都不变吗,所以受限于四元组,存在端口耗尽风险),所以会受到最大端口数量限制; (2)阿里云ecs默认一块主网卡(eth0),进行虚拟ip配置后,会发生无法连接其他网络服务问题,如阿里云redis得给~

2.进行配置弹性网卡,并绑定,成功后如图:

首先到创建一个弹性网卡,然后到ecs主机的弹性网卡进行绑定,分配弹性ip(手动或自动)

3.添加虚拟ip到eth1网卡:

 ifconfig eth1:0 172.17.194.34 netmask 255.255.240.0
ip addr add 172.17.194.34/24 dev eth1:0

ifconfig eth1:1 172.17.194.35 netmask 255.255.240.0
ip addr add 172.17.194.35/24 dev eth1:1

ifconfig eth1:2 172.17.194.36 netmask 255.255.240.0
ip addr add 172.17.194.36/24 dev eth1:2

ifconfig eth1:3 172.17.194.37 netmask 255.255.240.0
ip addr add 172.17.194.37/24 dev eth1:3

ifconfig eth1:4 172.17.194.38 netmask 255.255.240.0
ip addr add 172.17.194.38/24 dev eth1:4

ifconfig eth1:5 172.17.194.39 netmask 255.255.240.0
ip addr add 172.17.194.39/24 dev eth1:5

ifconfig eth1:6 172.17.194.40 netmask 255.255.240.0
ip addr add 172.17.194.40/24 dev eth1:6

ifconfig eth1:7 172.17.194.41 netmask 255.255.240.0
ip addr add 172.17.194.41/24 dev eth1:7

ifconfig eth1:8 172.17.194.42 netmask 255.255.240.0
ip addr add 172.17.194.42/24 dev eth1:8

修改nginx反向代理负载均衡:

upstream talkshow {
        server 127.0.0.1:8080;
        server 172.17.194.33:8080;
        server 172.17.194.34:8080;
        server 172.17.194.35:8080;
        server 172.17.194.36:8080;
        server 172.17.194.37:8080;
        server 172.17.194.38:8080;
        server 172.17.194.39:8080;
        server 172.17.194.40:8080;
        server 172.17.194.41:8080;
        server 172.17.194.42:8080;
    }
server{
        listen 8088;
        server_name xxx.xxx.net;
          #省略 

        location api{
             proxy_pass http://talkshow/api;
        }

}

4.看效果

用户端(公网ip + 本地端口) -> nginx (8088端口) -> 后端服务器 (几个弹性内网ip + 8080端口)

以下是演示一i次短连接请求,关闭keep-alive

(1)服务器端进行主动关闭nginx连接,产生time_wait,可见四元组突破65535端口限制

(2)nginx端进行主动关闭连接用户端连接,产生time_wait,可见四元组突破65535端口限制

其他解决办法

(1)直接通过阿里云的slb直接代理转发到后端服务,不再经过nginx,阿里云的slb会有多个ip进行转发到后端服务

(2)进行扩容后端机器,物理突破限制