目前我正在使用nginx代理8个工人的gunicorn。 我正在使用4个虚拟内核的亚马逊超大型实例。 当我直接连接到gunicorn我得到约10K请求/秒。 当我从nginx服务一个静态文件时,我得到约25个请求/秒。
但是当我在同一台物理服务器上放置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; }
网站启用/默认:
upstream backend { server 127.0.0.1:8000; } server { server_name api.domain.com ; location / { proxy_pass http://backend; proxy_buffering off; } }
一定要添加multi_accept on; 指令到你的事件块。 这确保每个工作人员尽可能多地接受连接。
不要使用tcp_nodelay on; 如果你没有提供巨大的数据/stream。 即使你是你应该只在适当的位置块激活它。
不要把所有的东西都代理到你的后端,只代理从你的后端真正提供的东西。 您可能还想创build一个代理caching来加速所有的事情。 以下是我根据上面发布的configuration组成的示例configuration。
# /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; }
和虚拟主机。
# /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; } }