Certifique-se de adicionar a diretiva multi_accept on;
ao seu bloco de eventos. Isso garante que cada trabalhador aceite o máximo de conexões possível.
Não use tcp_nodelay on;
se você não estiver servindo dados / streams enormes. Mesmo que você esteja, você só deve ativá-lo no bloco de localização apropriado.
Não faça proxy de tudo para o seu back-end, apenas o proxy que realmente deve ser servido no seu back-end. Você também pode querer criar um cache de proxy para acelerar tudo ainda mais. O seguinte é um exemplo de configuração que fiz de acordo com a configuração que você postou acima.
# /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;
}
E o host virtual.
# /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;
}
}