kết nối () không thành công (111: Kết nối bị từ chối) trong khi kết nối với thượng nguồn


85

Tôi đang gặp 502 Gatewaylỗi khi truy cập tệp PHP trong thư mục ( http://example.com/dev/index.php). Các bản ghi chỉ đơn giản nói điều này:

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"

Tôi chưa bao giờ trải nghiệm điều này trước đây. Giải pháp cho loại 502 Gatewaylỗi này là gì?

Đây là 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
'Kết nối bị từ chối' có nghĩa là phụ trợ không nghe cổng 9000 hoặc hàng đợi của nó bị lấp. Vấn đề này có liên quan đến itsef phụ trợ. Bạn có thể telnet localhost 9000 không? Bạn cũng nên kiểm tra nhật ký phụ trợ và php của bạn.
Andrew

Cập nhật bài viết của tôi. Tôi không thể telnet đến localhost 9000.
MacMac

Lỗi tương tự tôi gặp phải bạn, Điều này mô tả liên kết nhập ở đây có thể giúp bạn
Tripathi29

Câu trả lời:


43

Có vẻ như bạn chưa bắt đầu và định cấu hình phụ trợ cho Nginx. Bắt đầu php-fpmvà thêm các mục sau vào nginx.conf, trong httpngữ cảnh:

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
Cảm ơn người đàn ông, nó đã làm việc, tôi đã không php-fpmcài đặt. Chúc mừng.
MacMac

6
Bạn là thiên tài thuần túy. Tôi không thể tin được 1,0000000 triệu hướng dẫn mà tôi đã đọc về điều này, NOBODY đề cập rằng bạn phải đặt "nghe 127.0.0.1" để bật phụ trợ. Bạn đã cứu tôi khỏi một cơn ác mộng !!!

bạn nên xem xét để sử dụng ổ cắm unix. Xem nó với netstat -lvà xem /var/run/php5-fpm.sock(cấu hình cho cái này thường ở /etc/php5/fpm/pool.d/www.conf. fastcgi_pass unix:<socket>
JohannesM

2
bạn sẽ có listen = /var/run/php5-fpm.sockbên trong /etc/php5/fpm/pool.d/www.conf. nhưng bạn sẽ muốn listen = 9000;listen = /var/run/php5-fpm.sock. nếu bạn giống tôi (hoặc cách khác là bạn có thể lắng nghe gợi ý khôn ngoan của JohannesM. Điều mà tôi tưởng tượng sẽ để lại cho bạn một cái gì đó giống như fastcgi_pass unix:/var/run/php5-fpm.sock;ở đâu đó trong bạn nginx.conf)
n611x007

Có cùng một vấn đề với php 7.2. Bạn có ý nghĩa gì khi thêm tệp trong ngữ cảnh httpd? Đây sẽ là một tập tin conf bổ sung trong thư mục / etc / nginx / sites-Available / hay sao?
PeterKA

47

Câu trả lời này chỉ dành cho những người gặp lỗi như thế này:

kết nối () không thành công (111: Kết nối bị từ chối) trong khi kết nối với thượng nguồn, máy khách .... fastcgi: // [:: 1]: 9000

Viết lại cấu hình nginx của bạn để sử dụng ip, không phải dns. Chẳng hạn, 127.0.0.1thay vì localhosthoặc xóa bí danh ipv6 khỏi / etc / hosts.


3
Bạn chỉ cho tôi đi đúng hướng! Tôi mặc dù sử dụng chỉ listen 80là tốt (và có rất nhiều ví dụ ngoài đó) nhưng tôi không nghĩ rằng nó ngụ ý cả địa chỉ IPv4 ( 127.0.0.1) và IPv6 ( [::1]).
glarrain

5
Tôi đã phải thay đổi từ listen 80 default_serversang listen 0.0.0.0:80.
givanse

Bạn có thể chỉ ra lý do tại sao điều này sẽ giúp?
kaiser

1
Trở thành hầu hết các bản phân phối linux có ipv6 được kích hoạt trong mạng, nhưng không phải tất cả các gói được cấu hình để sử dụng ipv6. Theo tôi, khi nginx khởi tạo kết nối ngược dòng, bộ giải quyết hệ thống trả về địa chỉ ipv6 trước. Php-fpm (centos 7.x) không có cài đặt như vậy từ hộp. Và hầu hết các hướng dẫn giải thích tất cả trong phiên bản ipv4, quên đi tương lai ipv6 nên bị vô hiệu hóa hoặc sử dụng.
Quake1TF

Whooah, vì vậy [:: 1] là địa chỉ IPv6 localhost! :) Cảm ơn!
lechup

4

Có lỗi như thế này quá. Vấn đề là phụ trợ trừu tượng của tôi tham chiếu hai máy chủ. php-fpmchỉ được liệt kê vào ổ cắm ...

# 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

Có cùng một vấn đề với các yêu cầu được ủy quyền cho máy chủ Node lắng nghe trên cổng 5000. Các yêu cầu sẽ có kết quả 200 OKnhưng đôi khi 502 Bad Gatewayngẫu nhiên. NGINX đã hiển thị lỗi:

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

Giải pháp của tôi:

  1. Đặt máy chủ HTTP nút để lắng nghe nghiêm ngặt đối với ipv4 bằng cách bao gồm localhost làm máy chủ:server.listen(5000, 'localhost');
  2. Đã xóa bất kỳ chỉ thị lắng nghe ipv6 ( listen [::]:80;hoặc listen [::]:443 ssl default_server;).
  3. Đã thay đổi khối vị trí proxy_pass để sử dụng IP: proxy_pass http://127.0.0.1:5000(không proxy_pass http://localhost:5000).

Hy vọng điều này sẽ giúp được ai đó.


0

Trong trường hợp của tôi, lỗi là một vị trí xấu cho tệp error_log cho dịch vụ php5.6-fpm và do đó dịch vụ php-fpm không khởi động đượcnginx không thể kết nối với nó . Bạn có thể tìm thấy nó trong /etc/php/5.6/fpm/php.ini(bạn có thể thay thế 5.6 bằng phiên bản bạn đang chạy).


-1

Mới hôm nay tôi gặp phải vấn đề này và đối với tôi đó là vấn đề bộ nhớ thấp trong thời gian tải cao. Vì vậy, lên cấp loại thể hiện đã khắc phục vấn đề.


-4

Tôi đã có cùng một vấn đề và thêm tuyên bố lắng nghe

listen 127.0.0.1;

đã làm cho tôi.

Thật thú vị, tôi có các khối máy chủ khác đang chạy khá vui vẻ mà không có điều này!


3
Điều này đã được trả lời và chấp nhận rồi, ba năm trước.
Sven
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.