比方说,我有一个简单的nginxconfiguration与uwsgi后端对话:
server { listen 9900 default_server; listen [::]:9900 default_server; location / { include uwsgi_params; uwsgi_pass unix:/tmp/service-foo.sock; } }
这个服务有一些url( /renderer/... )的子集,总是非常慢,在重负载的情况下,整个网站都会崩溃。
我想要的是用两个后端replace这个,就像这样:
server { listen 9900 default_server; listen [::]:9900 default_server; location / { include uwsgi_params; uwsgi_pass unix:/tmp/service-foo.sock; } location ~ ^/renderer/[0-9]+/ { include uwsgi_params; uwsgi_pass unix:/tmp/service-renderer.sock; uwsgi_read_timeout 30s; uwsgi_send_timeout 30s; uwsgi_request_buffering on; } }
…我的天真的期望是,这将解决这个问题,通过允许/renderer/...请求缓慢服务一个,而其余的网站保持响应。
但是,它没有工作。
看起来nginx从同一进程向两个位置提供请求,最终服务器只是坐在那里阻塞所有的请求,坐在第二个uwsgi实例,第一个uwsgi实例什么也不做。
我读了关于nginx的thread_pool指令,看起来几乎完全像我想要的(即一个特定的保留线程池的渲染器位置),但这似乎并不支持的uwsgi,它只是文件io。
有没有办法在nginx级别做我想要的?