Nginx TCP 快速打开问题

Nginx TCP 快速打开问题

我已在一台服务器上配置了 Nginx 和 Apache。nginx 服务器监听端口 80,Apache 监听端口 81。Nginx 用作反向代理。我在 nginx 中配置了 TCP Fast Open:

server {
    listen 107.6.155.74 fastopen=50;
    server_name servtest.com www.servtest.com;

服务器本身也启用了 TCP Fast Open:

root@server:~/projects/nginx# cat /proc/sys/net/ipv4/tcp_fastopen
3

为了测试这是否有效,我在运行 Ubuntu 的 PC 上配置了 Chrome 以使用 TCP Fast Open(chrome://flags 页面)。客户端上的 tcp_fastopen 设置为 1。

在服务器上我使用以下 grep 来查明是否使用了 TCP Fast Open:

grep '^TcpExt:' /proc/net/netstat | cut -d ' ' -f 87-92  | column -t
TCPOFOMerge  TCPChallengeACK  TCPSYNChallenge  TCPFastOpenActive  TCPFastOpenPassive  TCPFastOpenPassiveFail
0            2                2                0                  0                   0

我相信如果这可行,TCPFastOpenActive 和/或 TCPFastOpenPassive 计数器不应该为“0”。有什么想法可以真正找出 TCP Fast Open 是否被使用并且按预期工作?如果我需要提供更多信息,请告诉我。

答案1

我使用 TCP 快速打开测试代码进行了一些测试https://github.com/yuryu/tfoecho

当使用测试代码时,我的 TCPFastOpenPassive 计数确实增加了。

$ grep '^TcpExt:' /proc/net/netstat | cut -d ' ' -f 87-92  | column -t
TCPOFOMerge  TCPChallengeACK  TCPSYNChallenge  TCPFastOpenActive  TCPFastOpenActiveFail  TCPFastOpenPassive
1000         56217            1316             0                  0                      2041

所以我认为你的分析方法是正确的。

并且运行wireshark,可以清楚地看到TCP选项下的Fast Open Cookie。

我使用 Chromium 和 Nginx 对同一对机器进行了测试。

Chronium 版本:

版本 55.0.2883.75 基于 Debian stretch/sid 构建,在 Debian stretch/sid(64 位)上运行

wireshark 跟踪中没有快速打开 cookie。即使在 Chromium 中启用了快速打开选项。所以我怀疑问题出在 Chromium 上。

相关内容