Nginx 问题集

博客作者:联系请点击,搬运不易,希望请作者喝咖啡,可以点击联系博客作者

Nginx 出现大量 TIME_WAIT

检测TIME_WAIT状态的语句

1
$ netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
2
SYN_RECV 7
3
ESTABLISHED 756
4
FIN_WAIT1 21
5
SYN_SENT 3
6
TIME_WAIT 2000
Copied!
状态解析:
  • CLOSED - 无连接是活动的或正在进行
  • LISTEN - 服务器在等待进入呼叫
  • SYN_RECV - 一个连接请求已经到达,等待确认
  • SYN_SENT - 应用已经开始,打开一个连接
  • ESTABLISHED - 正常数据传输状态
  • FIN_WAIT1 - 应用说它已经完成
  • FIN_WAIT2 - 另一边已同意释放
  • ITMED_WAIT - 等待所有分组死掉
  • CLOSING - 两边同时尝试关闭
  • TIME_WAIT - 另一边已初始化一个释放
  • LAST_ACK - 等待所有分组死掉

解决方法

执行 vim /etc/sysctl.conf,并添加下面字段
1
net.ipv4.tcp_syncookies = 1
2
net.ipv4.tcp_tw_reuse = 1
3
net.ipv4.tcp_tw_recycle = 1
4
net.ipv4.tcp_fin_timeout = 30
Copied!
执行 /sbin/sysctl -p 让修改生效。

上传文件大小限制

问题现象

显示错误信息:413 Request Entity Too Large
意思是请求的内容过大,浏览器不能正确显示。常见的情况是发送 POST 请求来上传大文件。

解决方法

  • 可以在 http 模块中设置:client_max_body_size 20m;
  • 可以在 server 模块中设置:client_max_body_size 20m;
  • 可以在 location 模块中设置:client_max_body_size 20m;
三者区别是:
  • 如果文大小限制设置在 http 模块中,则对所有 Nginx 收到的请求。
  • 如果文大小限制设置在 server 模块中,则只对该 server 收到的请求生效。
  • 如果文大小限制设置在 location 模块中,则只对匹配了 location 路由规则的请求生效。

请求时间限制

问题现象

请求时间较长,链接被重置页面刷新。常见的情况是:上传、下载大文件。

解决方法

修改超时时间