web-dev-qa-db-fra.com

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

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, ce n'est que lorsqu'une autre page y redirige. et cela arrive pour certains fichiers javascript

l'é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.

16
Mohammad Jolani

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

Comme deuxième point de référence, vous pouvez vous pouvez top sur 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 les 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 pour PHP.

Pour réduire le problème, envoyez ces demandes 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.

4
Mark Stosberg

Je ne sais pas si c'est 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; }

1
user3520245