1.9 KiB
1.9 KiB
Nginx 问题集
Nginx 出现大量 TIME_WAIT
检测TIME_WAIT状态的语句
$ netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
SYN_RECV 7
ESTABLISHED 756
FIN_WAIT1 21
SYN_SENT 3
TIME_WAIT 2000
状态解析:
CLOSED
- 无连接是活动的或正在进行LISTEN
- 服务器在等待进入呼叫SYN_RECV
- 一个连接请求已经到达,等待确认SYN_SENT
- 应用已经开始,打开一个连接ESTABLISHED
- 正常数据传输状态FIN_WAIT1
- 应用说它已经完成FIN_WAIT2
- 另一边已同意释放ITMED_WAIT
- 等待所有分组死掉CLOSING
- 两边同时尝试关闭TIME_WAIT
- 另一边已初始化一个释放LAST_ACK
- 等待所有分组死掉
解决方法
执行 vim /etc/sysctl.conf
,并添加下面字段
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
执行 /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
路由规则的请求生效。
请求时间限制
问题现象
请求时间较长,链接被重置页面刷新。常见的情况是:上传、下载大文件。
解决方法
修改超时时间