Je vis 502 Gateway
erreurs lors de l'accès à un fichier PHP dans un répertoire (http://example.com/dev/index.php
). Les journaux indiquent simplement ceci:
2011/09/30 23:47:54 [error] 31160#0: *35 connect() failed (111: Connection refused) while connecting to upstream, client: xx.xx.xx.xx, server: domain.com, request: "GET /dev/ HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", Host: "domain.com"
Je n'ai jamais vécu ça auparavant. Quelle est la solution pour ce type de 502 Gateway
Erreur?
C'est le nginx.conf
:
user www-data;
worker_processes 4;
pid /var/run/nginx.pid;
events {
worker_connections 768;
# multi_accept on;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
gzip_disable "msie6";
# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
Il semble que vous n'ayez pas démarré et configuré le backend pour Nginx. Début php-fpm
et ajoutez ce qui suit à nginx.conf
, dans le contexte http
:
server {
listen 127.0.0.1;
server_name localhost;
error_log /var/log/nginx/localhost.error_log info;
root /var/www/localhost/htdocs;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
fastcgi_intercept_errors on;
error_page 404 /error/404.php;
}
}
Cette réponse est uniquement pour ceux qui obtiennent une erreur comme celle-ci:
connect () a échoué (111: connexion refusée) lors de la connexion en amont, au client .... fastcgi: // [:: 1]: 9000
Réécrivez votre configuration nginx pour utiliser ip, pas dns. Par exemple, 127.0.0.1
au lieu de localhost
, ou supprimez l'alias ipv6 de/etc/hosts.
Vous avez aussi des erreurs comme ça. Le problème était mon backend abstrait référençant deux serveurs. php-fpm
ne listait que pour socket ...
# Upstream to abstract backend connection(s) for php
upstream php {
server unix:/var/run/php5-fpm.sock;
#server 127.0.0.1:9000;
}
server {
[...]
location ~ \.php$ {
# NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
# With php5-fpm:
fastcgi_pass php;
fastcgi_index index.php;
fastcgi_intercept_errors on;
include fastcgi_params;
}
}
Nous avons eu le même problème avec les requêtes mandatées vers un serveur Node écoutant sur le port 5000. Les requêtes résultaient avec 200 OK
Mais parfois 502 Bad Gateway
Au hasard. NGINX a montré l'erreur:
connect() failed (111: Connection refused) while connecting to upstream, client: ..., server: ...
Ma solution:
server.listen(5000, 'localhost');
listen [::]:80;
Ou listen [::]:443 ssl default_server;
).proxy_pass http://127.0.0.1:5000
(Pas proxy_pass http://localhost:5000
).J'espère que cela aide quelqu'un.
Dans mon cas, l'erreur était un mauvais emplacement pour le fichier error_log pour le service php5.6-fpm et donc le service php-fpm n'a pas pu démarrer et nginx n'a pas pu se connecter à it. Vous pouvez le trouver dans /etc/php/5.6/fpm/php.ini
(vous pouvez remplacer 5.6 par la version que vous utilisez).