2 votes

Nginx proxy inverse - ne ferme pas la connexion amont lorsque le client HTTPS se déconnecte

J'ai un serveur qui a besoin de savoir quand le client ferme la connexion. Le serveur est derrière un proxy inverse nginx. Tout fonctionne bien en HTTP, mais dès que j'active SSL, nginx semble maintenir la connexion amont ouverte pendant une minute complète après que le client HTTPS se soit déconnecté.

Comment puis-je demander à nginx de fermer la connexion amont lorsque le client se déconnecte ?

Voici ma configuration nginx :

ssl_session_cache off;
server {
  listen 443;
  ssl on;
  ssl_certificate server.crt;
  ssl_certificate_key server.key;
  location /find {
    proxy_pass http://my_upstream;
    proxy_ignore_client_abort off;
    proxy_buffering off;
  }
}

3voto

justwrote Points 46

Assez tard mais pourrait être utile pour d'autres. J'ai eu le même problème et il s'est avéré être un problème avec nginx (voir https://www.ruby-forum.com/topic/4412004) :

Donc, le problème sous-jacent est que l'abstraction de la couche de flux nginx n'est pas assez propre pour gérer les événements de bas niveau du système d'exploitation, puis les mapper à travers la couche SSL pour lire/écrire/événements conceptuels eof selon les besoins. Au lieu de cela, vous avez besoin d'un événement "eof" de niveau système d'exploitation, que vous supposez ensuite se mapper à travers la couche d'abstraction SSL à un événement eof de flux SSL.

Ok, donc j'ai examiné le traitement eof de kqueue, et ce qui est nécessaire pour le traitement eof de epoll, et j'ai créé un correctif rapide qui semble fonctionner.

J'ai appliqué le correctif sur la version 1.4.2 et ça a marché! Pas de problèmes jusqu'à présent. Espérons que cela sera corrigé dans l'une des prochaines versions.

Edité

Ce problème semble être résolu avec la version nginx >= 1.5.5 :

Fonctionnalité : maintenant nginx utilise les événements EPOLLRDHUP pour détecter la fermeture prématurée de la connexion par les clients si la méthode "epoll" est utilisée.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X