nginx: tidak ada upstream langsung saat terhubung ke upstream

15

502 kesalahan gateway buruk ditampilkan ketika beralih di antara halaman situs dan beberapa kali di halaman rumah tetapi tidak untuk permintaan pertama di halaman rumah hanya ketika halaman lain mengarahkan ulang ke halaman tersebut. dan itu terjadi untuk beberapa file javascript

load balancing yang dikonfigurasi pada dua upstreams php1 php2 keduanya adalah server apache.

Ketika saya memeriksa log kesalahan saya suka:

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/"

dan ini adalah konfigurasi server load balancing

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

    }

Saya mencari berjam-jam dan tidak ada yang membantu menemukan aliran saya naik dan tidak ada masalah dengan mereka.

Mohammad Jolani
sumber
Apakah server hulu Anda (php01, php02) berfungsi? Bisakah Anda telnet dari mesin ngnix ke mereka?
neutrinus
Mereka terhubung.
Mohammad Jolani
Sudahkah Anda memeriksa bahwa server hulu memiliki cukup proses yang berjalan untuk menangani lalu lintas? Anda harus memeriksa log server hulu jika mereka menolak permintaan karena beberapa alasan.
Tero Kilkanen
Saya lakukan dan tidak ada masalah dengan log kesalahan hulu, dan tidak ada akses log untuk permintaan gateway buruk.
Mohammad Jolani
Apakah Anda menemukan solusi untuk masalah ini?
flickerfly

Jawaban:

4

Ini bukan masalah dengan Nginx, ini adalah masalah dengan backend PHP Anda tidak merespons dalam waktu. Anda dapat menambahkan logging ke Nginx untuk membantu mengonfirmasi ini .

Sebagai titik referensi kedua, Anda dapat melakukannya topdi server dan memeriksa secara manual apakah PHP membanting CPU untuk jangka waktu tertentu, indikator lain dari respons yang lambat.

Jika respons PHP sangat lambat, Anda bisa meminta Nginx untuk menunggu lebih lama sebelum menyerah:

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

Dengan memeriksa log dengan informasi waktu yang ditautkan di atas, Anda harus dapat mengetahui permintaan mana yang lambat untuk diproses oleh PHP.

Untuk mempersempit masalahnya, kirim permintaan ini langsung ke backend PHP.

Bergantung pada apa yang terjadi, Anda mungkin juga dapat mengaktifkan caching dari beberapa permintaan di Nginx, menghindari beberapa permintaan yang lambat.

Mark Stosberg
sumber
0

Tidak tahu apakah itu persis sama tetapi yang berhasil bagi saya adalah menambahkan max_fails = 0 di akhir nama server

upstream sm_url {server LOAD_BALANCER_DOMAIN_NAME: max_fails = 0; }

pengguna3520245
sumber
-3

Ubah nama upstream menjadi "up_example.com" dan ubah

proxy_pass  http://$server_name/$uri;

menjadi

proxy_pass  http://up_$server_name$uri;
Mark R.
sumber
Meskipun tidak konvensional, saya tidak melihat masalah teknis dengan penggunaan $server_name. Jika ini masalahnya, saya pikir dia akan memiliki masalah / sepanjang waktu, tidak hanya kadang-kadang seperti yang dilaporkan.
Mark Stosberg