nginx接收了很多请求,进行代理的时候发起tcp连接,这时会占用一个未被使用的随机端口,如果不改主机内核参数,就会造成端口不够用的情况,提示Cannot assign requested address
解决方法1:
调低time_wait状态端口等待时间:
调低端口释放后的等待时间,默认为60s,修改为15~30s
sysctl -w net.ipv4.tcp_fin_timeout=30
修改tcp/ip协议配置, 通过配置/proc/sys/net/ipv4/tcp_tw_resue, 默认为0,修改为1,释放TIME_WAIT端口给新连接使用
sysctl -w net.ipv4.tcp_tw_reuse=1
修改tcp/ip协议配置,快速回收socket资源,默认为0,修改为1
sysctl -w net.ipv4.tcp_tw_recycle=1
解决方法2
增加可用端口port_range:
确认port_range范围
# sysctl -a |grep port_range
net.ipv4.ip_local_port_range = xxx xxx
修改配置
# vi /etc/sysctl.conf
net.ipv4.ip_local_port_range = 1024 65535
改完后,执行命令“sysctl -p”使参数生效。
相应的,应该继续适配地修改主机内核参数,否则会被告警:
修改nf_conntrack配置:
net.nf_conntrack_max = 4194304
net.netfilter.nf_conntrack_tcp_timeout_established = 300
net.netfilter.nf_conntrack_max = 2097152
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120