我目前正在使用 nginx 代理回有 8 个工人的 gunicorn。我正在使用具有 4 个虚拟核心的亚马逊超大实例。当我直接连接到 gunicorn 时,我收到大约 10K 请求/秒。当我从 nginx 提供静态文件时,我收到大约 25 个请求/秒。
但是当我将 gunicorn 放在同一台物理服务器上的 nginx 后面时,我得到大约 5K 请求/秒。我知道 nginx 会有一些延迟,但我认为可能有问题,因为它下降了 50%。有人听说过类似的吗?任何帮助都会很棒!
这是相关的nginx conf:
worker_processes 4;
worker_rlimit_nofile 30000;
events {
worker_connections 5120;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
}
Run Code Online (Sandbox Code Playgroud)
启用站点/默认:
upstream backend {
server 127.0.0.1:8000;
}
server {
server_name api.domain.com ;
location / {
proxy_pass http://backend;
proxy_buffering off;
}
}
Run Code Online (Sandbox Code Playgroud)
Fle*_*der 11
确保将multi_accept on;指令添加到您的事件块。这确保每个工作人员接受尽可能多的连接。
tcp_nodelay on;如果您不提供大量数据/流,请不要使用。即使您是,您也应该只在适当的位置块中激活它。
不要将所有内容都代理到您的后端,只代理应该从您的后端真正提供的内容。您可能还想创建一个代理缓存以进一步加速一切。以下是我根据您上面发布的配置组成的示例配置。
# /etc/nginx/nginx.conf
worker_processes 4;
worker_rlimit_nofile 20480; # worker_connections * 4
events {
multi_accept on;
worker_connections 5120;
use epoll;
}
http {
charset utf-8;
client_body_timeout 65;
client_header_timeout 65;
client_max_body_size 10m;
default_type application/octet-stream;
keepalive_timeout 20;
reset_timedout_connection on;
send_timeout 65;
server_tokens off;
sendfile on;
server_names_hash_bucket_size 64;
tcp_nodelay off;
tcp_nopush on;
include sites-enabled/*.conf;
}
Run Code Online (Sandbox Code Playgroud)
还有虚拟主机。
# /etc/nginx/sites-available/default.conf
upstream backend {
server 127.0.0.1:8000;
}
server {
server_name api.domain.com;
location / {
try_files $uri $uri/ @backend;
}
location @backend {
proxy_buffering off;
proxy_pass http://backend;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15477 次 |
| 最近记录: |