我尝试通过nginx通过反向代理从<10.220.17.192>连接到外部服务器(10.220.224.126),但在外部服务器上,连接没有建立到TIME_WAIT。
从nginx调试日志中,我可以看到“上游断开连接”。这是否意味着外部服务器关闭了连接的服务器?
2020/12/10 15:09:51 [debug] 10166#0: *11 event timer del: 4: 82382883
2020/12/10 15:09:51 [info] 10166#0: *11 proxy 10.220.17.192:50125 connected to 10.220.224.126:6515
2020/12/10 15:09:51 [debug] 10166#0: *11 malloc: 08DA8A10:16384
2020/12/10 15:09:51 [debug] 10166#0: *11 post event 08D8EFD0
2020/12/10 15:09:51 [debug] 10166#0: *11 epoll add event: fd:3 op:1 ev:80002001
2020/12/10 15:09:51 [debug] 10166#0: *11 event timer add: 3: 14400000:96778145
2020/12/10 15:09:51 [debug] 10166#0: *11 event timer: 3, old: 96778145, new: 96778145
2020/12/10 15:09:51 [debug] 10166#0: *11 delete posted event 08D8EFD0
2020/12/10 15:09:51 [debug] 10166#0: *11 SSL_read: 0
2020/12/10 15:09:51 [debug] 10166#0: *11 SSL_get_error: 5
2020/12/10 15:09:51 [debug] 10166#0: *11 peer shutdown SSL cleanly
2020/12/10 15:09:51 [debug] 10166#0: *11 posix_memalign: 08E22BE0:256 @16
2020/12/10 15:09:51 [debug] 10166#0: *11 write new buf t:0 f:0 00000000, pos 08DA8A10, size: 0 file: 0, size: 0
2020/12/10 15:09:51 [debug] 10166#0: *11 stream write filter: l:1 f:1 s:0
2020/12/10 15:09:51 [info] 10166#0: *11 upstream disconnected, bytes from/to client:0/0, bytes from/to upstream:0/0发布于 2020-12-17 17:30:50
在分析了nginx源代码的日志之后,我得到了这个问题的答案。
如果nginx从外部服务器接收到连接闭包,它将发送post事件。
2020/12/10 15:09:51 [debug] 10166#0: *11 post event 08D8EFD0SSL_read的手册页上写着,如果SSL_read: 0
读取操作没有成功。原因可能是由于对等方发送的“关闭通知”警报(在这种情况下,设置了处于ssl关闭状态的SSL_RECEIVED_SHUTDOWN标志(请参见SSL_shutdown(3)和SSL_set_shutdown(3)而导致的完全关闭。也有可能,对等方只需关闭底层传输,并且关闭是不完整的。使用返回值调用SSL_get_error(),以确定是否发生错误或连接是否完全关闭(SSL_ERROR_ZERO_RETURN)
2020/12/10 15:09:51 [debug] 10166#0: *11 SSL_read: 0
2020/12/10 15:09:51 [debug] 10166#0: *11 SSL_get_error: 5
2020/12/10 15:09:51 [debug] 10166#0: *11 peer shutdown SSL cleanly对于下面的nginx日志,手册上是这样写的,
2020/12/11 09:13:06 [debug] 11489#0: *1 SSL_shutdown: 1如果对等方已经发送了“关闭通知”警报,并且已经在另一个函数(SSL_read(3))中隐式处理了它,则设置SSL_RECEIVED_SHUTDOWN标志。SSL_shutdown()将发送“关闭通知”警报,设置SSL_SENT_SHUTDOWN标志并立即返回1。可以使用SSL_get_shutdown()检查是否已经设置了SSL_RECEIVED_SHUTDOWN (还请参阅SSL_set_shutdown(3)调用)。
https://stackoverflow.com/questions/65238500
复制相似问题