nginx 反向代理 - 当 HTTPS 客户端断开连接时不会关闭上游连接

nginx 反向代理 - 当 HTTPS 客户端断开连接时不会关闭上游连接

我有一台服务器,需要知道客户端何时关闭连接。该服务器位于 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 事件来检测客户端过早关闭的连接。

相关内容