访问目录(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/*;
}


评论

“拒绝连接”表示后端不侦听端口9000或队列已满。此问题与后端itef有关。您可以通过telnet localhost 9000吗?您还应该检查您的后端和php日志。

更新了我的帖子。我无法远程登录到本地主机9000。

我遇到的同样错误,请在此处输入链接说明

#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