nginx: Keine Live-Upstreams während der Verbindung zum Upstream

15

502 Fehlerhafter Gateway-Fehler beim Wechseln zwischen Websiteseiten und zu bestimmten Zeiten auf der Startseite, jedoch nicht bei der ersten Anforderung auf der Startseite, wenn eine andere Seite darauf umleitet. und es passiert für einige Javascript-Dateien

Load Balancing konfiguriert auf zwei Upstreams Php1 Php2 sind beide Apache Server.

Als ich das Fehlerprotokoll überprüfte, fand ich:

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

Dies ist die Konfiguration des Lastausgleichsservers

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

    }

Ich habe stundenlang gesucht und nichts Hilfreiches festgestellt, dass meine Streams aktiv sind und keine Probleme damit haben.

Mohammad Jolani
quelle
Funktionieren Ihre Upstream-Server (php01, php02)? Könnten Sie Telnet von Ngnix-Maschine zu ihnen?
Neutrinus
Sie sind verbunden.
Mohammad Jolani
Haben Sie überprüft, ob auf den Upstream-Servern genügend Prozesse ausgeführt werden, um den Datenverkehr zu verarbeiten? Sie sollten die Protokolle des Upstream-Servers überprüfen, wenn diese aus irgendeinem Grund Anforderungen ablehnen.
Tero Kilkanen
Ich habe und kein Problem mit einem Upstream-Fehlerprotokoll und kein Zugriffsprotokoll für die fehlerhaften Gateway-Anforderungen.
Mohammad Jolani
Haben Sie eine Lösung für dieses Problem gefunden?
Flickerfly

Antworten:

4

Dies ist kein Problem mit Nginx, es ist ein Problem mit Ihren PHP-Backends, die nicht rechtzeitig reagieren. Sie können Nginx die Protokollierung hinzufügen, um dies zu bestätigen .

Als zweiten Bezugspunkt können Sie topauf dem Server überprüfen, ob PHP die CPU für bestimmte Zeiträume überlastet. Dies ist ein weiterer Indikator für langsame Antworten.

Wenn sehr langsame Antworten von PHP in Ordnung sind, können Sie Nginx bitten, länger zu warten, bevor Sie aufgeben:

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

Wenn Sie die Protokolle mit den oben genannten Timing-Informationen untersuchen, sollten Sie in der Lage sein, herauszufinden, welche Anforderungen von PHP nur langsam verarbeitet werden.

Um das Problem einzugrenzen, senden Sie diese Anfragen direkt an das PHP-Backend.

Abhängig davon, was gerade passiert, können Sie möglicherweise auch das Zwischenspeichern einiger Anforderungen in Nginx aktivieren, um einige langsame Anforderungen zu vermeiden.

Mark Stosberg
quelle
0

Ich weiß nicht, ob es ganz dasselbe ist, aber für mich hat es funktioniert, max_fails = 0 am Ende des Servernamens hinzuzufügen

Upstream-sm_url {Server LOAD_BALANCER_DOMAIN_NAME: max_fails = 0; }

user3520245
quelle
-3

Benennen Sie den Upstream in "up_example.com" um und ändern Sie ihn

proxy_pass  http://$server_name/$uri;

Sein

proxy_pass  http://up_$server_name$uri;
Mark R.
quelle
Obwohl unkonventionell, sehe ich kein technisches Problem bei der Verwendung von $server_name. Wenn dies das Problem wäre, würde er wahrscheinlich die ganze Zeit über Probleme haben, nicht nur manchmal, wie berichtet.
Mark Stosberg