web-dev-qa-db-fra.com

client fermé prématurément la connexion lors de l'envoi au client, dans nginx

J'ai une erreur dans nginx error.log:

2010/12/05 17:11:49 [info] 7736#0: *1108 client closed prematurely connection while sending to client, 
client: 188.72.80.201, server:***.biz, request: "GET /forum/ HTTP/1.1", 
upstream:"http://***:3000/forum/", Host: "***.biz"

J'ai 500 codes de réponse sur le site à chaque fois. Comment puis-je réparer cela?

Je vous remercie.

29
Aleksey

Réglage [proxy_ignore_client_abort on;][1] pourrait vous aider.

17
timurb

J'ai abordé ce problème moi-même pendant de longues heures aujourd'hui et j'ai trouvé une solution:
Veuillez noter que ce correctif ne vous affecte que lorsque vous utilisez des équilibreurs de charge

Vérifiez le délai d'inactivité de votre équilibreur de charge. Le délai d'inactivité ELB a été défini sur 60 secondes (par défaut) et, comme la demande était suspendue, il a fermé la connexion après un délai donné. Mais comme l'ELB est avant nginx, nginx enregistre que le "client" (dans ce cas ELB), ferme la connexion.

Donc, si vous utilisez ELB, accédez à:
EC2 -> Équilibreurs de charge -> Sélectionnez celui qui convient -> faites défiler vers le bas dans la description et modifiez le délai d'inactivité si vous utilisez d'autres équilibreurs de charge, vérifiez leur configuration et leurs délais d'expiration.

Gardez également à l'esprit que vous devrez peut-être encore modifier les délais d'expiration du proxy, etc.

13
Henrik Peinar

J'ai trouvé que si vous désactivez le tampon proxy,

http {
   proxy_buffering off;
...
}

Les tampons sont probablement trop petits ou moins. Après avoir changé la taille des tampons, cela fonctionne bien

proxy_buffering on;
proxy_buffer_size 8k;
proxy_buffers 2048 8k;
7
Ivailo Bardarov

J'ai eu le même problème et j'ai fait des recherches à ce sujet. Dans mon cas, cela ne se produit qu'avec les navigateurs Webkit (Chrome). Ils ouvrent les connexions de manière optimiste plus de connexions que nécessaire si vous ne chargez qu'une seule ressource. Dans un tel cas, la connexion excédentaire est fermée de façon disgracieuse ou au moins sans envoyer de verbe HTTP dessus. Cela conduit à l'erreur mentionnée dans nginx.

Concernant la réponse n ° 1: aucune des solutions proposées n'aide, ce qui est logique car cela n'a rien à voir avec le proxy.

Concernant la réponse n ° 2: proxy_ignore_client_abort on; pas aide-t-il dans mon test.

Malheureusement, je n'ai trouvé aucune autre solution que d'utiliser

error_log off;

2
vanthome

J'ai eu le même problème, j'ai constaté que nginx ferme la connexion en raison du paramètre send_timeout. J'ai augmenté et c'est fixe.

http
{
send_timeout 20;
...
}
1
Omid