502 Gateway
)中的PHP文件时遇到http://example.com/dev/index.php
错误。日志只是这么说: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"
我以前从未经历过。此类
502 Gateway
错误的解决方案是什么?这是
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/*;
}
#1 楼
听起来您还没有启动和配置Nginx的后端。启动php-fpm
并在nginx.conf
上下文中将以下内容添加到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;
}
}
评论
谢谢男人,它工作正常,我没有安装php-fpm。干杯。
– MacMac
2011年10月1日,11:21
你真是天才。我不敢相信我读到的10亿指南,NOBODY提到必须启用“监听127.0.0.1”才能启用后端。你把我从一场噩梦中救了出来!!!
–user145046
2012年11月11日19:39
您应该考虑使用unix套接字。使用netstat -l查看它,并查看/var/run/php5-fpm.sock(此配置通常在/etc/php5/fpm/pool.d/www.conf中。fastcgi_pass unix:
– JohannesM
2014年5月22日13:59
您将在/etc/php5/fpm/pool.d/www.conf中收听= /var/run/php5-fpm.sock。但是您将需要listen = 9000和; listen = /var/run/php5-fpm.sock。如果你像我。 (或者,您也可以收听JohannesM的明智提示,我想这会让您留下诸如fastcgi_pass unix:/var/run/php5-fpm.sock之类的东西;在您的nginx.conf中的某个位置)
–n611x007
2015年1月1日在16:20
与PHP 7.2有同样的问题。在httpd上下文中添加文件是什么意思?这是/ etc / nginx / sites-available /文件夹中的其他conf文件,还是什么?
– PeterKA
18年2月1日在14:56
#2 楼
此答案仅适用于遇到以下错误的用户:connect()在连接到上游客户端时失败(111:连接被拒绝)....
fastcgi :// [:: 1]:9000
重写您的nginx配置以使用ip而不是dns。例如,用
127.0.0.1
代替localhost
,或从/ etc / hosts中删除ipv6别名。评论
您为我指明了正确的方向!我虽然只使用侦听80很好(并且有很多示例),但我不认为这暗示了IPv4(127.0.0.1)和IPv6([:: 1])地址。
–格兰林
14年8月12日,0:15
我不得不从监听80 default_server改为监听0.0.0.0:80。
–givanse
2014年11月12日6:00
您能否指出为什么这应该有所帮助?
– kaiser
16-2-9在2:38
因为大多数Linux发行版都在网络中启用了ipv6,但并非所有配置用于ipv6的数据包。我认为,当nginx启动与上游的连接时,系统解析器首先返回ipv6地址。 php-fpm(centos 7.x)在框中没有这样的设置。而且大多数指南都在ipv4版本中进行了解释,而忘记了应该禁用或使用的ipv6期货。
– Quake1TF
16年2月9日在14:54
哇,所以[:: 1]是本地IPv6地址! :) 谢谢!
–lechup
17年1月4日,11:08
#3 楼
也有类似的错误。问题是我的抽象后端引用了两个服务器。
php-fpm
仅列出了套接字... # 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;
}
}
#4 楼
对侦听端口5000的节点服务器的代理请求也存在相同的问题。请求将与200 OK
一起产生,但有时会随机产生502 Bad Gateway
。 NGINX显示错误:connect() failed (111: Connection refused) while connecting to upstream, client: ..., server: ...
我的解决方案:
通过包含
以localhost作为主机:
server.listen(5000, 'localhost');
删除了所有ipv6监听指令(
listen [::]:80;
或listen
[::]:443 ssl default_server;
)。更改了位置块proxy_pass以使用IP:
proxy_pass http://127.0.0.1:5000
(不是proxy_pass http://localhost:5000
)。帮助某人。
#5 楼
在我的情况下,错误是php5.6-fpm服务的error_log文件的错误位置,因此php-fpm服务无法启动,nginx无法连接到该文件。您可以在/etc/php/5.6/fpm/php.ini
中找到它(可以将5.6替换为正在运行的版本)。 #6 楼
以防万一有人拼命地试图解决他们的问题,只是意识到他们的反向代理设置没有什么问题:就我而言,即使我删除了所有
location
指令,但仅删除了一个指令,该错误仍然存在提供静态内容。该错误消息是由于Nginx无法将其日志记录到syslog服务器而引起的:
access_log syslog:server=10.0.1.48:514,facility=local4,tag=nginx,severity=debug,nohostname main;
摘要:
如果使用的是syslog日志服务器,请确保它可用。要测试错误是否源自日志记录设置,请注释掉所有日志记录配置,以使Nginx退回到本机日志记录方案。
我希望这可以节省一些人调试完全有效的反向代理配置的时间,以便查找其他地方出现错误:D
#7 楼
就在今天,我遇到了这个问题,对我来说,这是在高负载期间的低内存问题。因此,升级实例类型可以解决此问题。#8 楼
我遇到了同样的问题,并添加了listen语句listen 127.0.0.1;
对我有用。
足够有趣的是,我还有其他正在运行的服务器块开心地没有这个!
评论
三年前,这已经得到了回答和接受。
– Sven
2014年11月26日23:13
试过这个,它导致了太多的重定向。
– Mark Micallef
20年7月2日,11:29
评论
“拒绝连接”表示后端不侦听端口9000或队列已满。此问题与后端itef有关。您可以通过telnet localhost 9000吗?您还应该检查您的后端和php日志。更新了我的帖子。我无法远程登录到本地主机9000。
我遇到的同样错误,请在此处输入链接说明