Comment pouvez-vous configurer nginx pour l'empêcher de bloquer sur un service lent de back-up uwsgi?

Disons que j'ai une configuration nginx simple qui parle d'un backend uwsgi:

server { listn 9900 default_server; listn [::]:9900 default_server; location / { include uwsgi_params; uwsgi_pass unix:/tmp/service-foo.sock; } } 

Ce service dispose d'un certain sous-set d'URL ( /renderer/... ) qui sont toujours énormément lents, et sous une charge lourde, tout le site tombe en panne.

Ce que je veux, c'est de le replace par deux copys du backend, comme ceci:

 server { listn 9900 default_server; listn [::]: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; } } 

… mes attentes naïves étaient que cela permettrait de résoudre le problème en permettant aux requests /renderer/... d'être servies lentement une à la fois alors que le rest du site restait réactif.

Cependant, cela n'a pas fonctionné.

Il semble que nginx serve les requêtes dans les deux endroits à partir du même process et, éventuellement, le server justs se trouve bloquant avec toutes les requêtes assises dans la deuxième instance de uwsgi, et la première instance de uwsgi ne fait rien du tout.

J'ai lu sur la directive nginx thread_pool qui ressemble presque exactement à ce que je veux (c.-à-d. Un pool de threads réservé spécifique pour l'location du rendu), mais cela ne semble pas être pris en charge par uwsgi, c'est juste pour le file io.

Y a-t-il un moyen de faire ce que je veux au niveau nginx?