我有一台服务器,需要知道客户端何时关闭连接。该服务器位于 nginx 反向代理后面。一切通过 HTTP 运行正常,但只要我打开 SSL,nginx 似乎就会在 HTTPS 客户端断开连接后保持上游连接打开一整分钟。
当客户端断开连接时,如何让 nginx 关闭上游连接?
这是我的 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;
}
}
答案1
有点晚了,但可能对其他人有帮助。我遇到了同样的问题,结果发现是 nginx 的问题(请参阅https://www.ruby-forum.com/topic/4412004):
因此,根本问题是 nginx 流层抽象不够清晰,无法处理低级 OS 事件,然后根据需要通过 SSL 层将它们映射到读/写/eof 概念事件。相反,您需要一个 OS 级别的“eof”事件,然后您假设它通过 SSL 抽象层映射到 SSL 流 eof 事件。
好的,我查看了 kqueue eof 处理以及 epoll eof 处理所需的内容,并创建了一个似乎可以工作的快速补丁。
我申请了修补在 1.4.2 上成功了!到目前为止没有问题。希望在下一个版本中可以修复它。
已编辑
这个问题似乎可以通过 nginx 版本 >= 来解决1.5.5:
功能:如果使用“epoll”方法,nginx 现在使用 EPOLLRDHUP 事件来检测客户端过早关闭的连接。