![Nginx 背后的 Gunicorn - 负载测试期间 TIME_WAIT 数量较高](https://linux22.com/image/704441/Nginx%20%E8%83%8C%E5%90%8E%E7%9A%84%20Gunicorn%20-%20%E8%B4%9F%E8%BD%BD%E6%B5%8B%E8%AF%95%E6%9C%9F%E9%97%B4%20TIME_WAIT%20%E6%95%B0%E9%87%8F%E8%BE%83%E9%AB%98.png)
nginx版本:nginx/1.9.3 gunicorn(版本19.7.1)
我在 nginx 后面的 gunicorn 中运行了一个小型 flask API。当我直接通过 gunicorn 进行加载测试时,一切都运行良好,但是一旦我将其指向 nginx,我就会得到 nginx 服务器上非常多的 TIME_WAIT 套接字。Gunicorn 盒子很好。以下是配置:
古尼康:
bind = '0.0.0.0:7030'
workers = 10
threads = 1
daemon = True
DEBUG = "True"
Nginx:相关块:
upstream api {
keepalive 32;
server box1:7030;
server box2:7030;
}
server {
listen 7077;
server_name localhost;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 1;
location / {
proxy_next_upstream error timeout http_500 http_404 http_502;
proxy_pass http://api;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
我一直在测试和调整配置,但我没有看到打开的套接字数量有任何变化。我知道有几个操作系统设置建议调整,例如 ip_local_port_range 和 tcp_tw_recycle / tcp_tw_reuse,但是我在其中一个必须共享服务器的环境中工作,如果没有很长的准备时间,我无法调整这些设置。
我可以在 nginx / gunicorn 端做任何事情吗?请注意,运行 gunicorn 的服务器根本没有显示很多打开的套接字,Nginx 是否希望 gunicorn/flask/api 保持连接打开并重用现有套接字?