nginx: pas d'amont en direct lors de la connexion à l'amont


15

Une erreur de passerelle 502 s'affiche lors du basculement entre les pages du site et parfois sur la page d'accueil, mais pas pour la première demande sur la page d'accueil, c'est uniquement lorsqu'une autre page y redirige. et cela arrive pour certains fichiers javascript

équilibrage de charge configuré sur deux amonts php1 php2 sont tous deux un serveur apache.

Lorsque j'ai vérifié le journal des erreurs, j'aimais:

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

et c'est la configuration du serveur d'équilibrage de charge

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

    }

J'ai cherché pendant des heures et rien d'utile n'a trouvé que mes flux étaient en hausse et aucun problème avec eux.


Vos serveurs en amont (php01, php02) fonctionnent-ils? Pourriez-vous telnet de la machine ngnix à eux?
neutrinus

Ils sont connectés.
Mohammad Jolani le

Avez-vous vérifié que les serveurs en amont ont suffisamment de processus en cours d'exécution pour gérer le trafic? Vous devez vérifier les journaux du serveur en amont s'ils refusent les demandes pour une raison quelconque.
Tero Kilkanen le

Je l'ai fait et aucun problème avec aucun journal d'erreurs en amont, et aucun journal d'accès pour les mauvaises demandes de passerelle.
Mohammad Jolani le

Avez-vous trouvé une solution à ce problème?
flickerfly

Réponses:


4

Ce n'est pas un problème avec Nginx, c'est un problème avec vos backends PHP qui ne répondent pas à temps. Vous pouvez ajouter la journalisation à Nginx pour aider à confirmer cela .

Comme deuxième point de référence, vous pouvez vous pouvez topsur le serveur et vérifier manuellement si PHP claque le CPU pendant des périodes de temps, un autre indicateur de réponses lentes.

Si des réponses très lentes de PHP vous conviennent, vous pouvez demander à Nginx d'attendre plus longtemps avant d'abandonner:

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

En examinant les journaux avec les informations de synchronisation liées à ce qui précède, vous devriez être en mesure de déterminer quelles demandes sont lentes à traiter par PHP.

Pour limiter le problème, envoyez ces requêtes directement au backend PHP.

Selon ce qui se passe, vous pouvez également activer la mise en cache de certaines demandes dans Nginx, en évitant certaines des demandes lentes.


0

Je ne sais pas si c'est tout à fait la même chose mais ce qui a fonctionné pour moi a été d'ajouter max_fails = 0 à la fin du nom du serveur

sm_url {serveur LOAD_BALANCER_DOMAIN_NAME en amont: max_fails = 0; }


-3

Renommez l'amont en "up_example.com" et changez

proxy_pass  http://$server_name/$uri;

être

proxy_pass  http://up_$server_name$uri;

Bien que non conventionnel, je ne vois aucun problème technique avec l'utilisation de $server_name. Si tel était le problème, je pense qu'il aurait des problèmes / tout le temps, pas seulement parfois comme indiqué.
Mark Stosberg
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.