J'utilise Django, FastCGI et Nginx. Je crée une API de sorte que quelqu'un puisse envoyer des données via XML que je traiterai, puis renverra des codes d'état pour chaque nœud envoyé.
Le problème est que Nginx lancera un délai d'attente de la passerelle 504 si le traitement du fichier XML prend trop de temps - je pense plus de 60 secondes.
Je voudrais donc configurer Nginx de manière à ce que toutes les demandes correspondant à l'emplacement/à l'API n'expireront pas pendant 120 secondes. Quel paramètre permettra d'accomplir cela.
Ce que j'ai jusqu'ici c'est:
# Handles all api calls
location ^~ /api/ {
proxy_read_timeout 120;
proxy_connect_timeout 120;
fastcgi_pass 127.0.0.1:8080;
}
Edit: Ce que j'ai ne fonctionne pas :)
Les délais d'attente des proxy sont bien, pour les mandataires, pas pour FastCGI ...
Les directives qui affectent les délais FastCGI sont client_header_timeout
, client_body_timeout
et send_timeout
.
Edit : Compte tenu de ce que l'on trouve sur le wiki nginx, la directive send_timeout est responsable de la définition du délai général de réponse (ce qui était un peu trompeur). ) Pour FastCGI, il y a fastcgi_read_timeout
qui affecte le délai de réponse du processus Fastcgi .
HTH.
Pour ceux qui utilisent nginx avec Unicorn et Rails, le délai d’expiration est probablement dans votre fichier Unicorn.rb
mettre un long délai d'attente dans Unicorn.rb
timeout 500
si vous rencontrez toujours des problèmes, essayez d’avoir fail_timeout = 0 dans votre amont dans nginx et voyez si cela résout votre problème. C'est à des fins de débogage et peut être dangereux dans un environnement de production.
upstream foo_server {
server 127.0.0.1:3000 fail_timeout=0;
}
Dans http
nginx section (/etc/nginx/nginx.conf) ajouter ou modifier:
keepalive_timeout 300s
Dans la section server
nginx (/etc/nginx/sites-available/your-config-file.com) ajoutez ces lignes:
client_max_body_size 50M;
fastcgi_buffers 8 1600k;
fastcgi_buffer_size 3200k;
fastcgi_connect_timeout 300s;
fastcgi_send_timeout 300s;
fastcgi_read_timeout 300s;
Dans le fichier php
dans l'affaire 127.0.0.1:9000 (/etc/php/7.X/fpm/pool.d/www.conf), modifiez:
request_terminate_timeout = 300
J'espère vous aider.
Si vous utilisez Licorne.
Regardez top
sur votre serveur. Unicorn utilise probablement 100% du processeur actuellement. Il y a plusieurs raisons à ce problème.
Vous devriez vérifier vos requêtes HTTP, certaines peuvent être très difficiles.
Vérifiez la version de Licorne. Peut-être que vous avez mis à jour récemment, et quelque chose a été cassé.