web-dev-qa-db-ja.com

Nginx-アップストリームへの接続中にconnect()が失敗しました(111:接続が拒否されました)

Django、Nginx、Gunicorn、Supervisord、fail2ban(ssh、http、httpsのみを許可)を使用するサイトを実行しています。サイトはライブで正常に動作していますが、次のようなnginxエラーログエントリがあります。

connect() failed (111: Connection refused) while connecting to upstream, client: x.x.x.x, server: www.example.com, request: "GET /example/url/to/get/ HTTP/1.1", upstream: "http://[::1]:8000/example/url/to/get/", Host: "www.example.com"

upstream server temporarily disabled while connecting to upstream, client: x.x.x.x, server: www.example.com, request: "GET /example/url/to/get/ HTTP/1.1", upstream: "http://[::1]:8000/example/url/to/get/", Host: "www.example.com"

これが私のnginx設定です:

upstream app_server_wsgiapp {
  server localhost:8000 fail_timeout=0;
}

server {
 listen 80;
 server_name www.example.com;
 return 301 https://www.example.com$request_uri;
}

server {
  server_name           www.example.com;
  listen                443 ssl;

  if ($Host = 'example.com') {
    return 301 https://www.example.com$request_uri;
  }

  ssl_certificate       /etc/nginx/example/example.crt;
  ssl_certificate_key   /etc/nginx/example/example.key;
  ssl_session_timeout   1d;
  ssl_session_cache     shared:SSL:50m;
  ssl_protocols         TLSv1.1 TLSv1.2;
  ssl_ciphers           'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-
AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-
SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-
SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-
SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-
SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-
AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-
SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-
SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-
SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-
SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-
CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
  ssl_prefer_server_ciphers   on;

  access_log          /var/log/nginx/www.example.com.access.log;
  error_log           /var/log/nginx/www.example.com.error.log info;
  keepalive_timeout   5;

  proxy_read_timeout    120s;

  # nginx serve up static and media files
  location /static {
    autoindex on;
    alias /static/path;
  }

  location /media {
        autoindex on;
        alias /media/path;
  }

  location / {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_Host;
    proxy_redirect off;
    if (!-f $request_filename) {
        proxy_pass http://app_server_wsgiapp;
        break;
    }
  }
}

Gunicornログにエラーはありません。

私が言ったように、サイトは正しく機能しています。しかし、後で大きな問題になる可能性のあるエラーログを無視したくありません。

2
darkpool

これは、システムがデュアルスタックであるにもかかわらず、アップストリームがIPv4のみであるためでしょうか?

localhost[::1]に解決しているように見えます。これは、アップストリームによっては、それ自体に問題がある可能性があります。

ループバックを介して通信している場合、Connection refusedは「本物」であると思いがちですが、これは実際の問題を反映しています。

これが問題であるかどうかを確認するには、上流の設定でlocalhost127.0.0.1に置き換えます。

upstream app_server_wsgiapp {
  server 127.0.0.1:8000 fail_timeout=0;
}
8

上流のlocalhostを127.0.0.1に置き換えることで解決したnginx error.logに次のメッセージが表示されていました。同じ呼び出しで、access.logに成功したエントリがあり、error.logに接続が拒否されたエントリがありました。助けてくれてどうもありがとう。

2017/08/15 16:41:27 [エラー] 17337#0:* 382749上流への接続中に失敗した(111:接続が拒否されました)、クライアント:10.10.xx.xx、サーバー:test.myhost.com、リクエスト: "GET/test/relaystate HTTP/1.1"、アップストリーム: " http:// [:: 1]:8800/test/relaystate "、ホスト: "test.myhost.com"

0
SutuwaShell