nginx 反向代理将我的吞吐量减半

Isa*_*era 4 nginx proxy

我目前正在使用 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)

  • @IsaacAMosquera 我很想知道您使用此配置后的吞吐量是多少 (10认同)