连接到上游时connect()失败(111:连接被拒绝)


85

502 Gateway访问目录(http://example.com/dev/index.php)中的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
“拒绝连接”表示后端不侦听端口9000或队列已满。此问题与后端itef有关。您可以通过telnet localhost 9000吗?您还应该检查您的后端和PHP日志。
安德鲁

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

我面对您的相同错误,请在此输入链接描述,对您有帮助
Tripathi29

Answers:


43

听起来您尚未启动并配置Nginx的后端。在上下文中启动php-fpm并将以下内容添加到nginx.confhttp

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;
    }
}

3
谢谢男人,它工作正常,我没有php-fpm安装。干杯。
MacMac 2011年

6
你真是天才。我不敢相信我读到的10亿指南,NOBODY提到必须启用“监听127.0.0.1”才能启用后端。你把我从一场噩梦中救了出来!!!

您应该考虑使用unix套接字。与一起查看netstat -l并查看/var/run/php5-fpm.sock(该配置通常在/etc/php5/fpm/pool.d/www.conf中。– fastcgi_pass unix:<socket>
JohannesM

2
你将有listen = /var/run/php5-fpm.sock里面/etc/php5/fpm/pool.d/www.conf。但你会想要listen = 9000;listen = /var/run/php5-fpm.sock。如果你像我。(或者另外,您可以通过JohannesM听明智暗示我想象会离开你喜欢的东西。fastcgi_pass unix:/var/run/php5-fpm.sock;某处你nginx.conf
n611x007

与PHP 7.2有同样的问题。在httpd上下文中添加文件是什么意思?这是/ etc / nginx / sites-available /文件夹中的其他conf文件,还是什么?
-PeterKA,

47

此答案仅适用于出现以下错误的人:

连接到上游客户端时,connect()失败(111:连接被拒绝)。... fastcgi:// [:: 1]:9000

重写您的nginx配置以使用ip,而不是dns。例如,127.0.0.1代替localhost,或从/ etc / hosts中删除ipv6别名。


3
您为我指明了正确的方向!我虽然使用just listen 80很好(并且那里有很多示例),但我不认为这暗示了IPv4(127.0.0.1)和IPv6([::1])地址。
glarrain 2014年

5
我必须从更改listen 80 default_serverlisten 0.0.0.0:80
givanse 2014年

您能指出为什么这应该有所帮助吗?
kaiser

1
因为大多数Linux发行版都在网络中启用了ipv6,但并非所有配置用于ipv6的数据包。我认为,当nginx启动与上游的连接时,系统解析器首先返回ipv6地址。php-fpm(centos 7.x)在框中没有这样的设置。而且大多数指南都在ipv4版本中进行了解释,而忘记了应该禁用或使用的ipv6期货。
Quake1TF'2

哇,所以[:: 1]是本地IPv6地址!:) 谢谢!
lechup

4

也有这样的错误。问题是我的抽象后端引用了两个服务器。 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;
    }
}

1

对侦听端口5000的节点服务器的代理请求也存在相同的问题。请求将随时间200 OK502 Bad Gateway随机产生。NGINX显示了错误:

connect() failed (111: Connection refused) while connecting to upstream, client: ..., server: ...

我的解决方案:

  1. 通过将localhost作为主机,将节点HTTP服务器设置为严格侦听 ipv4:server.listen(5000, 'localhost');
  2. 删除了任何ipv6监听指令(listen [::]:80;listen [::]:443 ssl default_server;)。
  3. 将位置块proxy_pass更改为使用IP :(proxy_pass http://127.0.0.1:5000不是proxy_pass http://localhost:5000)。

希望这对某人有帮助。


0

在我的情况下,错误是php5.6-fpm服务的error_log文件的错误位置,因此php-fpm服务无法启动nginx无法连接到该文件。您可以在中找到它/etc/php/5.6/fpm/php.ini(可以用正在运行的版本替换5.6)。


-1

就在今天,我遇到了这个问题,对我来说,这是在高负载期间的低内存问题。因此,升级实例类型可以解决此问题。


-4

我有同样的问题,并添加了listen语句

listen 127.0.0.1;

为我工作。

有趣的是,如果没有此功能,我还有其他的服务器块运行非常愉快!


3
三年前,这已经得到了回答和接受。
斯文
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.