我正在尝试在 nginx 上使用 fastcgi,但遇到了一些问题。
Nginx 不会重用连接,它在 BeginRequest 标志中给出 0,因此应用程序应该在请求完成后关闭连接。
我有以下关闭代码:
socket.shutdown(SocketShutdown.BOTH);
socket.close();
问题是连接实际上并没有关闭。它们以 TIME_WAIT 的形式徘徊,并且 nginx(或其他东西)不会继续打开新连接。
我的猜测是我在关闭套接字时做错了什么,但我不知道是什么..在相关说明中 - 如何让 nginx 保持连接打开?
这是使用 nginx 1.0.6 和 D 2.055
编辑:
还没有更近,但我也检查了 linger 选项,它已关闭:
linger l;
socket.getOption(SocketOptionLevel.SOCKET, SocketOption.LINGER, l);
assert(l.on == 0); // off
getOption
但返回 4.. 不知道这意味着什么。返回值未记录。
编辑:
我还尝试在发送的最后一条消息上使用 TCP_NODELAY,但这也没有任何效果:
socket.setOption(SocketOptionLevel.SOCKET, SocketOption.TCP_NODELAY, 1);
编辑:
nginx 1.1.4 支持保持活动连接。但这并没有按预期工作。正确地报告服务器负责连接生命周期管理,但它仍然为每个请求创建一个新的套接字。