Question Erreurs nginx «recv () a échoué (104: la connexion a été réinitialisée par un homologue) lors de la lecture de l'en-tête de la réponse depuis l'amont»


J'ai un serveur qui fonctionnait correctement jusqu'au 3 octobre 2013 à 10h50, heure à laquelle il a commencé à renvoyer par intermittence les erreurs "502 Bad Gateway" au client.

Environ 4 demandes de navigateur sur 5 aboutissent, mais environ 1 sur 5 échoue avec un 502.

Le journal des erreurs nginx contient plusieurs centaines de ces erreurs;

2013/10/05 06:28:17 [error] 3111#0: *54528 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 66.249.66.75, server: www.bec-components.co.uk  request: ""GET /?_n=Fridgefreezer/Hotpoint/8591P;_i=x8078 HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "www.bec-components.co.uk"

Cependant, le journal des erreurs PHP ne contient aucune erreur correspondante.

Y at-il un moyen pour que PHP me donne plus d’informations sur les raisons pour lesquelles il réinitialise la connexion?

C'est nginx.conf;

user              www-data;
worker_processes  4;
error_log         /var/log/nginx/error.log;
pid               /var/run/nginx.pid;

events {
   worker_connections  1024;
}

http {
  include          /etc/nginx/mime.types;
  access_log       /var/log/nginx/access.log;

  sendfile               on;
  keepalive_timeout      30;
  tcp_nodelay            on;
  client_max_body_size   100m;

  gzip         on;
  gzip_types   text/plain application/xml text/javascript application/x-javascript text/css;
  gzip_disable "MSIE [1-6]\.(?!.*SV1)";

  include /gvol/sites/*/nginx.conf;

}

Et c'est le .conf pour ce site;

server {

  server_name   www.bec-components.co.uk bec3.uk.to bec4.uk.to bec.home;
  root          /gvol/sites/bec/www/;
  index         index.php index.html;

  location ~ \.(js|css|png|jpg|jpeg|gif|ico)$ {
    expires        2592000;   # 30 days
    log_not_found  off;
  }

  ## Trigger client to download instead of display '.xml' files.
  location ~ \.xml$ {
    add_header Content-disposition "attachment; filename=$1";
  }

   location ~ \.php$ {
      fastcgi_read_timeout  3600;
      include               /etc/nginx/fastcgi_params;
      keepalive_timeout     0;
      fastcgi_param         SCRIPT_FILENAME  $document_root$fastcgi_script_name;
      fastcgi_pass          127.0.0.1:9000;
      fastcgi_index         index.php;
   }
}

## bec-components.co.uk ##
server {
   server_name   bec-components.co.uk;
   rewrite       ^/(.*) http://www.bec-components.co.uk$1 permanent;
}

34
2017-10-05 11:28


origine


Qu'est-ce qui a changé ce jour-là? Mis à jour votre application ou PHP? Quelle est votre application? Avez-vous activé le débogage dans php-fpm? - Pothi Kalimuthu
Rien n'a été changé ce jour-là. La configuration du serveur n'a pas été modifiée, pas plus que les scripts PHP. Ce n'est pas à court d'espace disque. Mon application est juste un ensemble de PHP les scripts. Je n'utilise pas php-fpm, Je cours php-fastcgi en faisant php-cgi -b 127.0.0.1:9000. Cela fonctionne sans faute depuis 3 ans. Je ne peux pas comprendre pourquoi il a développé ce problème. - Nigel Alderton
J'avais un problème similaire récemment où nginx se plaignait de la réinitialisation de la connexion par un homologue tout en lisant l'en-tête de la réponse en amont. Dans mon cas, c’était uWSGI qui était le véritable problème. Redémarrer uWSGI a corrigé le problème pour moi. problème. - APZ
Votre service en amont ( php-cgi -b 127.0.0.1:9000 ) échoue par intermittence, peut-être à cause de l’augmentation du trafic et du manque de ressources. - LinuxDevOps


Réponses:


Je ferais toujours confiance si mes serveurs Web me disaient: 502 Bad Gateway 

  • quelle est la disponibilité de votre processus fastcgi / nginx?
  • surveillez-vous les connexions réseau?
  • pouvez-vous confirmer / refuser un changement de nombre de visiteurs autour de ce jour?

Qu'est-ce que ça veut dire:

  • votre fastcgi-process n'est pas accessible par nginx; soit pour ralentir ou ne pas correspondre du tout. mauvaise passerelle signifie que nginx ne peut pas passer rapidement à la ressource définie 127.0.0.1:9000; à ce moment précis.

  • votre journal d'erreur initial dit tout:

.

recv() failed 
    -> nginx failed

(104: Connection reset by peer) while reading response header from upstream, 
    -> no complete answer, or no answer at all
upstream: "fastcgi://127.0.0.1:9000", 
    -> who is he, who failed???

de mon pov limité je suggérerais:

  • redémarrez votre fastcgi_process / server
  • vérifier votre journal d'accès
  • activer le journal de débogage

16
2017-10-06 07:26



D'accord. Que me disent mes serveurs web? - Nigel Alderton
voir mon édition (qu'est-ce que cela signifie) - that guy from over there
Je vois, donc le Gateway dans ce cas, c'est le serveur PHP. Je vous remercie. - Nigel Alderton


Je sais que ce sujet est ancien, mais il continue à apparaître occasionnellement, alors, cherchant des réponses sur le Web, j'ai proposé les trois possibilités suivantes:

  1. Une erreur de programmation est parfois causée par la segmentation de php-fpm, ce qui signifie que la connexion avec nginx sera interrompue. Cela laissera généralement au moins quelques journaux et / ou vidages de noyau, qui peuvent être analysés plus en détail.
  2. Pour une raison quelconque, PHP n’est pas en mesure d’écrire un fichier de session (généralement: session.save_path = "/var/lib/php/sessions"). Cela peut être de mauvaises autorisations, une mauvaise propriété, un mauvais utilisateur / groupe, ou des problèmes plus ésotériques / obscurs tels que le manque d’inodes sur ce répertoire (ou même un disque complet!). Ce sera généralement ne pas laisser beaucoup de dumps de base et peut-être même rien dans les journaux d’erreurs PHP.
  3. Encore plus délicat à déboguer: une extension se comporte mal (heurtant parfois une limite interne ou un bug qui ne se déclenche pas tout le temps), segfaulting et amène le processus php-fpm avec elle - fermant ainsi la connexion avec nginx . Les coupables habituels sont APC, memcache / d, etc. (dans mon cas, il s’agissait de l’extension New Relic), l’idée étant ici de désactiver chaque extension jusqu’à ce que l’erreur disparaisse.

7
2018-06-05 23:24



+1 Dans mon cas, il s'agissait de l'erreur numéro 1 - de programmation. - Nimbuz
Nous avons rencontré cette erreur et la désactivation de l'extension New Relic APM PHP a révélé une erreur plus spécifique qui nous a permis de localiser le problème: [29-Jan-2018 16:47:48 UTC] Erreur irrécupérable PHP: taille de mémoire autorisée de 805306368 octets épuisé (essayé d'allouer 262144 octets) dans vendeur / magento / module-configurable-product / Prix / Prix / ConfigurableRegularPrice.php à la ligne 142 [29-Jan-2018 16:47:48 UTC] PHP Erreur fatale: taille de mémoire autorisée de 805306368 octets épuisés (tentative d'allocation de 323584 octets) dans Unknown sur la ligne 0 Je suppose que New Relic est bloqué sur le chemin "Unknown". - Erik Hansen


J'ai gardé ça aussi. Résolu en augmentant le opcache limite de mémoire, si vous l'utilisez (remplacement de APC). Apparemment, PHP-FPM a interrompu ses connexions chaque fois que le cache était trop plein. C'est aussi la raison pour laquelle la réponse de shgnInc le corrige pour une courte période.

Alors trouvez le fichier /etc/php5/fpm/php.ini (ou équivalent dans votre distribution) et augmentez memory_consumption quel que soit le niveau requis par votre site. Désactiver opcache peut aussi travailler.

[opcache]
opcache.memory_consumption = 196 

6
2018-02-02 02:34





Vous voudrez peut-être envisager ce git sur github: https://gist.github.com/amichaelgrant/90d99d7d5d48bf8fd209

J'ai rencontré une situation similaire. Lorsque j'ai vérifié les journaux d'erreurs de mes serveurs en amont, ils signalaient une erreur ulimit. J'ai donc augmenté ce nombre à 1000000 (sur les boîtes en amont et nginx) et tout a bien fonctionné.


2
2017-11-11 17:48





Dans mon cas de même problème, je viens de redémarrer le php-fpm service si résolu.

sudo service php5-fpm restart

Ou parfois, ce problème se produit à cause d'une énorme demande. Par défaut le pm.max_requests dans php5-fpm est peut-être 100 ou moins.

Pour le résoudre, augmentez sa valeur en fonction des demandes de votre site, par exemple 500.

Et après, vous devez redémarrer le service


2
2017-10-26 08:19





Dans mon cas, la désactivation xdebug l'extension a aidé.


1
2017-10-02 22:24





Je viens d'avoir un problème similaire:

Vous vous connectez à php-fpm sur le port 9000. (fastcgi: //127.0.0.1: 9000)

La configuration standard sur Ubuntu sur mon serveur est la suivante:

/etc/php/7.0/fpm/pool.d/www.conf:

listen = /run/php/php7.0-fpm.sock

vous devez changer ceci en:

listen = 0.0.0.0:9000

Dans mon cas, j’ai mis à jour mon serveur il ya un an et demi, écrasant par défaut ma configuration costom. Maintenant, ayant redémarré php-fpm, cette erreur est survenue avec retard.


0
2017-07-24 15:49