J'ai un serveur qui fonctionnait correctement jusqu'au 3 octobre 2013 à 10h50, heure à laquelle il a commencé à renvoyer de manière intermittente les erreurs "502 Bad Gateway" au client.
Environ 4 demandes de navigateur sur 5 aboutissent, mais environ 1 sur 5 échoue avec un 502.
Le journal des erreurs nginx contient plusieurs centaines de ces erreurs;
2013/10/05 06:28:17 [error] 3111#0: *54528 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 66.249.66.75, server: www.bec-components.co.uk request: ""GET /?_n=Fridgefreezer/Hotpoint/8591P;_i=x8078 HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "www.bec-components.co.uk"
Cependant, le journal des erreurs PHP ne contient aucune erreur correspondante.
Y at-il un moyen pour que PHP me donne plus d’informations sur les raisons pour lesquelles il réinitialise la connexion?
C'est nginx.conf
;
user www-data;
worker_processes 4;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
access_log /var/log/nginx/access.log;
sendfile on;
keepalive_timeout 30;
tcp_nodelay on;
client_max_body_size 100m;
gzip on;
gzip_types text/plain application/xml text/javascript application/x-javascript text/css;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
include /gvol/sites/*/nginx.conf;
}
Et ceci est la .conf
pour ce site;
server {
server_name www.bec-components.co.uk bec3.uk.to bec4.uk.to bec.home;
root /gvol/sites/bec/www/;
index index.php index.html;
location ~ \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires 2592000; # 30 days
log_not_found off;
}
## Trigger client to download instead of display '.xml' files.
location ~ \.xml$ {
add_header Content-disposition "attachment; filename=$1";
}
location ~ \.php$ {
fastcgi_read_timeout 3600;
include /etc/nginx/fastcgi_params;
keepalive_timeout 0;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
}
}
## bec-components.co.uk ##
server {
server_name bec-components.co.uk;
rewrite ^/(.*) http://www.bec-components.co.uk$1 permanent;
}
PHP
scripts. Je n'utilise pasphp-fpm
, je cours justephp-fastcgi
en faisantphp-cgi -b 127.0.0.1:9000
. Cela fonctionne sans faute depuis 3 ans. Je ne peux pas comprendre pourquoi il a développé ce problème.php-cgi -b 127.0.0.1:9000
) échoue par intermittence, peut-être en raison d'un trafic accru et du manque de ressources.Réponses:
Je ferais toujours confiance si mes serveurs Web me disaient:
502 Bad Gateway
Qu'est-ce que ça veut dire:
votre fastcgi-process n'est pas accessible par nginx; soit pour ralentir ou ne pas correspondre du tout. mauvaise passerelle signifie que nginx ne peut pas passer rapidement à la ressource définie 127.0.0.1:9000; à ce moment précis .
votre journal d'erreur initial dit tout:
.
de mon pov limité je suggérerais:
la source
Gateway
dans ce cas, le serveur PHP. Merci.restart your fastcgi_process / server
est ce qui m'a aidé, thansJe sais que ce sujet est ancien, mais il continue à apparaître de temps en temps, alors, cherchant des réponses sur le Web, j'ai proposé les trois possibilités suivantes:
session.save_path = "/var/lib/php/sessions"
. Cela peut être de mauvaises autorisations, une mauvaise propriété, un mauvais utilisateur / groupe, ou des problèmes plus ésotériques / obscurs tels que le manque d’inodes sur ce répertoire (ou même un disque complet!). Cela ne laissera généralement pas beaucoup de fichiers de base et peut-être même rien dans les journaux d’erreurs PHP.la source
J'ai gardé ça aussi. Résolu en augmentant la
opcache
limite de mémoire, si vous l'utilisez (remplacement pour APC). Il semble que PHP-FPM ait interrompu ses connexions chaque fois que le cache était trop plein. C'est aussi la raison pour laquelle la réponse de shgnInc le corrige pour une courte période.Recherchez donc le fichier
/etc/php5/fpm/php.ini
(ou l’équivalent dans votre distribution) et augmentez-lememory_consumption
au niveau requis par votre site. Désactiveropcache
peut aussi fonctionner.la source
Vous voudrez peut-être envisager ce git sur github: https://gist.github.com/amichaelgrant/90d99d7d5d48bf8fd209
J'ai rencontré une situation similaire. Lorsque j'ai vérifié les journaux d'erreurs de mes serveurs en amont, ils signalaient une erreur ulimit. J'ai donc augmenté ce nombre à 1000000 (sur les boîtes en amont et nginx) et tout s'est bien passé.
la source
Dans le cas du même problème, je viens de redémarrer le
php-fpm
service afin qu'il soit résolu.Ou parfois, ce problème se produit à cause d'une énorme demande. Par défaut,
pm.max_requests
dans php5-fpm est peut-être 100 ou moins.Pour le résoudre, augmentez sa valeur en fonction des demandes de votre site, par exemple 500.
Et après, vous devez redémarrer le service
la source
Dans mon cas, la désactivation de l' extension xdebug m'a aidé.
la source
Je viens d'avoir un problème similaire:
Vous vous connectez à php-fpm sur le port 9000. (fastcgi: //127.0.0.1: 9000)
La configuration standard sous Ubuntu sur mon serveur est la suivante:
/etc/php/7.0/fpm/pool.d/www.conf:
listen = /run/php/php7.0-fpm.sock
vous devez changer ceci en:
listen = 0.0.0.0:9000
Dans mon cas, j’ai mis à jour mon serveur il ya un an et demi, écrasant par défaut ma configuration client. Maintenant que vous avez redémarré php-fpm, cette erreur est survenue avec un retard.
la source
Pour moi, c’est le serveur qui manque de mémoire et php-fpm qui est tué par le tueur OOM. La solution consistait à augmenter la quantité de mémoire du serveur.
la source
Pour moi, c'était parce que php-fpm atteignait la
max_children
limite. Le journal php-fpm de la piscine en question m'a orienté dans la bonne directionla source
Ce problème peut également survenir si un processus PHP-FPM dépasse la limite de mémoire allouée. Lorsque cela se produit, la connexion entre NGINX et PHP-FPM est interrompue et NGINX renvoie un
502 Bad Gateway
. La limite de mémoire du processus PHP-FPM est contrôlée par lamemory_limit
variable. Ceci peut être définiphp_admin_value[memory_limit]
dans le fichier de configuration PHP-FPM.Il est important de noter que la limite de mémoire s'applique à chaque script . Avec les
n
processus PHP-FPM, l'utilisation totale de la mémoire peut aller jusqu'àmemory_limit * n
. Assurez-vous de vérifier que votre machine dispose de suffisamment d'espace mémoire!la source