web-dev-qa-db-ja.com

nginx:アップストリームへの接続中にライブアップストリームなし

502の不正なゲートウェイエラーが表示されるのは、ホームページでサイトページを切り替える場合と、ホームページの最初のリクエストではない場合です。別のページがリダイレクトした場合のみです。そしてそれはいくつかのJavaScriptファイルで起こります

2つのアップストリームで構成された負荷分散php1 php2は両方ともApacheサーバーです。

私がエラーログをチェックしたとき、私は好きです:

no live upstreams while connecting to upstream

[error] 27212#0: *314 no live upstreams while connecting to   upstream, client: ip_address , server: example.com, request: "GET / HTTP/1.1", upstream: "http://example.com", Host: "example.com", referrer: "http://example.com/mypages/"

これは負荷分散サーバー構成です

  upstream example.com  {
    #  ip_hash;
      server php01 max_fails=3 fail_timeout=15s;
      server php02 max_fails=3 fail_timeout=15s;
    }

    server {
      listen IP:80;
      server_name example.com;
      access_log /var/log/nginx/example.com.access;
      error_log /var/log/nginx/example.com.error error;

     location / {
        proxy_set_header Host $Host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass  http://$server_name/$uri;
        proxy_cache_bypass $cookie_nocache $arg_nocache $arg_comment;
        proxy_cache_bypass $http_pragma $http_authorization;
        proxy_no_cache $cookie_nocache $arg_nocache $arg_comment;
        proxy_no_cache $http_pragma $http_authorization;
      }

    }

私は何時間も検索しましたが、ストリームがアップしていて問題はありませんでした。

16
Mohammad Jolani

これはNginxの問題ではなく、あなたのPHPバックエンドが時間内に応答しないことの問題です。 これを確認するためにNginxにロギングを追加する できます。

参照の2番目のポイントとして、サーバーでtopを実行し、PHPが一定期間CPUをスラミングしているかどうかを確認できます。これは、応答が遅いことのもう1つの指標です。

PHP=からの非常に遅い応答が問題ない場合は、Nginxにもっと長く待つように頼むことができます。

 # Wait 5 minutes before giving up on the backend!
 proxy_read_timeout 5m; 

上記にリンクされているタイミング情報を含むログを調べることにより、PHPが処理するのにどのリクエストが遅いかを把握できるはずです。

問題を絞り込むには、これらのリクエストをPHPバックエンドに直接送信します。

発生している状況によっては、Nginxで一部のリクエストのキャッシュを有効にして、一部の遅いリクエストを回避することもできます。

4
Mark Stosberg

それがまったく同じかどうかはわかりませんが、私にとってうまくいったのは、サーバー名の最後にmax_fails = 0を追加することでした

アップストリームsm_url {サーバーLOAD_BALANCER_DOMAIN_NAME:max_fails = 0; }

1
user3520245