问题
- 根据之前的文章单台服务器支持的最大连接数-困扰多年的问题可以知道,服务端可以支持无限多的连接数;
- 但是后端服务负使用nginx作为代理服务器转发时,如果短时间短连接请求非常多,由于time_wait状态连接过多,还是会出现端口被65535数量限制的问题;
- 此问题也出现再当服务器端大量请求相同地址第三方服务接口时;解决方案: (1)改为长连接请求,减少tcp连接数及端口耗用 (2)将多次请求改为单次批量数据请求 (3)分时间段批量请求,每次至少大于2msl时间
原因
1.当客户端直接访问服务器时,tcp的组合方式是以下方式,不会出现端口耗尽问题:
本地ip + 本地port + 远程ip + 远程port
2.但是当使用nginx进行转发到web服务后则变为:
本地ip + 本地port + 本地ip + 本地port
例如,我的nginx将通过域名访问的443端口,转发到我的端口号为9000的博客web服务:
访问几次后发现,由于nginx转发了访问,所以远程ip改为了内网ip
#解决
一.添加临时ip,使用内网ip负载转发
1.添加临时ip
(1)使用ipconfig或ip a s 查看ip及网卡,添加临时ip
ifconfig eth0:0 192.168.1.110 netmask 255.255.255.0
ip addr add 192.168.1.110/24 dev eth0:0
(2)删除临时ip方法
ip addr delete 192.168.1.110/24 dev eth0:0
*如果删除失败则可以尝试重新添加后删除
ip addr add 192.168.1.110/24 dev eth0:0
ip addr delete 192.168.1.110/24 dev eth0:0
又
2.设置nginx配置文件
upstream blog {
server 127.0.0.1:9000;
server 192.168.1.110:9000;
}
server {
listen 443 ssl http2;
server_name www.kakuiwong.cn;
ssl_certificate /opt/nginx_crt/1_www.kakuiwong.cn_bundle.crt;
ssl_certificate_key /opt/nginx_crt/2_www.kakuiwong.cn.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_prefer_server_ciphers on;
error_page 503 /xxoo.html;
location / {
#限流
limit_req zone=mylimit;
proxy_pass http://blog;
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_redirect off;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
}
查看端口状态,可以设置更多临时ip,此时端口65535限制由于本地ip不同以突破;
二.使用proxy_bind
此处不详细介绍;
三.使用端口重用
类似配置,可能会出现几率的脏数据:
net.ipv4.tcp_tw_recycle = 0 关掉快速回收
net.ipv4.tcp_tw_reuse = 1 开启tw状态的端口复用(客户端角色)
net.ipv4.tcp_timestamps = 1 复用需要timestamp校验为1
net.ipv4.tcp_max_tw_buckets = 30000 放大bucket
net.ipv4.ip_local_port_range = 15000 65000 放大本地端口范围
参考:
https://www.nginx.com/blog/overcoming-ephemeral-port-exhaustion-nginx-plus
https://www.sundayle.com/nginx-proxy-65535-port/
https://blog.csdn.net/Wjhsmart/article/details/107385614
本文由 GY 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为:
2022/09/27 06:32