73 lines
1.9 KiB
Markdown
73 lines
1.9 KiB
Markdown
# Nginx 问题集
|
|
|
|
## Nginx 出现大量 TIME_WAIT
|
|
|
|
### 检测TIME_WAIT状态的语句
|
|
|
|
```bash
|
|
$ 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`,并添加下面字段
|
|
|
|
```properties
|
|
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` 路由规则的请求生效。
|
|
|
|
## 请求时间限制
|
|
|
|
### 问题现象
|
|
|
|
请求时间较长,链接被重置页面刷新。常见的情况是:上传、下载大文件。
|
|
|
|
### 解决方法
|
|
|
|
修改超时时间
|
|
|