Je reçois 504 messages de délai d'attente de nginx lorsque mon script PHP s'exécute plus longtemps que d'habitude. set_time_limit(0)
ne semble pas empêcher cela! Est-ce que cela ne fonctionne pas lors de l'exécution de php5-fpm sur nginx? Si oui, quelle est la bonne manière de fixer la limite de temps?
Erreur:
504 Gateway Time-out
nginx/1.2.7
Il y a plusieurs façons de définir le délai d’expiration pour php-fpm. Dans /etc/php5/fpm/pool.d/www.conf
j'ai ajouté cette ligne:
request_terminate_timeout = 180
De plus, dans /etc/nginx/sites-available/default
, j'ai ajouté la ligne suivante au bloc d'emplacement du serveur en question:
fastcgi_read_timeout 180;
Le bloc d'emplacement entier ressemble à ceci:
location ~ \.php$ {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_read_timeout 180;
include fastcgi_params;
}
Maintenant, redémarrez php-fpm et nginx et il ne devrait plus y avoir de délai d'attente pour les demandes prenant moins de 180 secondes.
Essayez ceci lien , il a une meilleure solution pour résoudre ce problème. Les étapes sont donc les suivantes:
nginx.conf
situé dans le répertoire /etc/nginx
.Ajoutez ce morceau de code ci-dessous dans la section http {
:
client_header_timeout 3000;
client_body_timeout 3000;
fastcgi_read_timeout 3000;
client_max_body_size 32m;
fastcgi_buffers 8 128k;
fastcgi_buffer_size 128k;
Remarque: S'il est déjà présent, modifiez les valeurs en fonction.
Rechargez Nginx et php5-fpm.
$ service nginx reload
$ service php5-fpm reload
Si l'erreur persiste, envisagez d'augmenter les valeurs.
Vous ne pouvez pas utiliser PHP pour empêcher un délai d'attente émis par nginx.
Pour configurer nginx afin d’accorder plus de temps, reportez-vous à la directive proxy_read_timeout
) .
La réponse correcte augmente fastcgi_read_timeout dans votre configuration Nginx.
Aussi simple que cela!
Sudo nano /etc/nginx/nginx.conf
Ajoutez ces variables au fichier nginx.conf:
http {
# .....
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
}
Et puis redémarrez:
service nginx reload
Il existe trois types de délais d'expiration qui peuvent survenir dans un tel cas. On peut constater que chaque réponse ne porte que sur un aspect de ces possibilités. J'ai donc pensé l'écrire pour que les personnes qui visitent cet endroit à l'avenir n'aient pas besoin de vérifier chaque réponse au hasard et d'obtenir le succès sans savoir laquelle a fonctionné.
Donc, les correctifs pour chaque problème sont les suivants.
$.ajax({
url: "test.html",
error: function(){
// will fire when timeout is reached
},
success: function(){
//do something
},
timeout: 3000 // sets timeout to 3 seconds
});
délai d'attente du client nginx
http{
#in seconds
fastcgi_read_timeout 600;
client_header_timeout 600;
client_body_timeout 600;
}
délai d'inactivité du serveur mandaté par Nginx
http{
#Time to wait for the replying server
proxy_read_timeout 600s;
}
Alors utilisez celui dont vous avez besoin. Peut-être que dans certains cas, vous aurez besoin de toutes ces configurations. J'ai eu besoin.
Vous devez ajouter une directive nginx supplémentaire (pour ngx_http_proxy_module
) dans nginx.conf
, par exemple:
proxy_read_timeout 300;
En gros, la directive nginx proxy_read_timeout
modifie le délai du proxy, la FcgidIOTimeout
concerne les scripts trop longs et la commande FcgidBusyTimeout
, ses scripts sont trop longs à exécuter.
De plus, si vous utilisez l'application FastCGI, augmentez également ces options:
FcgidBusyTimeout 300
FcgidIOTimeout 250
Rechargez ensuite nginx et PHP5-FPM.
Dans Plesk, vous pouvez l'ajouter dans Paramètres du serveur Web sous Directives nginx supplémentaires .
Pour FastCGI, archivez Paramètres du serveur Web sous Directives supplémentaires pour HTTP .
Voir: Comment résoudre les problèmes de délai d’exécution de FastCGI dans Plesk?
Utiliser set_time_limit(0)
est inutile si vous utilisez php-fpm ou un gestionnaire de processus similaire.
Bottomline ne doit pas utiliser set_time_limit
lorsqu’on utilise php-fpm
, pour augmenter le délai d’exécution, cochez tutoriel .
Puisque vous utilisez php-fpm, vous devriez utiliser fastcgi_finish_request () pour traiter les requêtes dont vous savez qu’elles peuvent prendre plus de temps.