nginx:アップストリームへの接続中はライブアップストリームがありません


15

サイトページとホームページで何度か切り替えるときに表示される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;
      }

    }

私は何時間も検索しましたが、私のストリームがアップしていて問題ないことは何も役に立ちませんでした。


アップストリームサーバー(php01、php02)は機能していますか?ngnixマシンからそれらにtelnetできますか?
ニュートリヌス14

それらは接続されています。
モハンマドジョラニ14

アップストリームサーバーでトラフィックを処理するのに十分なプロセスが実行されていることを確認しましたか?何らかの理由で要求を拒否する場合は、上流サーバーのログを確認する必要があります。
テロキルカネン14

アップストリームエラーログには問題がなく、不正なゲートウェイリクエストに対するアクセスログもありません。
モハマドジョラニ14

この問題の解決策を見つけましたか?
フリッカーフライ

回答:


4

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

2つ目の参照点として、topサーバー上で、PHPが一定時間CPUを非難していることを手動で確認できます。これは、応答が遅いことのもう1つの指標です。

PHPからの非常に遅い応答が問題なければ、Nginxにaskめてからもっと長く待つように依頼できます。

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

上記にリンクされているタイミング情報を使用してログを調べることにより、PHPの処理が遅い要求を把握できるはずです。

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

何が起こっているかに応じて、Nginxで一部のリクエストのキャッシュを有効にし、遅いリクエストの一部を回避できる場合もあります。


0

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

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


-3

アップストリームの名前を「up_example.com」に変更し、変更します

proxy_pass  http://$server_name/$uri;

なる

proxy_pass  http://up_$server_name$uri;

型破りですが、の使用に技術的な問題は見られません$server_name。これが問題だった場合、報告されただけでなく、彼はすべての時間に問題があると思います。
マークストースバーグ16年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.