Nginx TCP 快速打开问题

Dan*_*hev 5 nginx tcp tcpdump chrome

我已经在我的一台服务器上配置了 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;
Run Code Online (Sandbox Code Playgroud)

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

root@server:~/projects/nginx# cat /proc/sys/net/ipv4/tcp_fastopen
3
Run Code Online (Sandbox Code Playgroud)

为了测试这是否有效,我在运行 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
Run Code Online (Sandbox Code Playgroud)

我相信 TCPFastOpenActive 和/或 TCPFastOpenPassive 计数器不应该是“0”,如果这有效。任何想法如何实际找出是否使用 TCP Fast Open 并按预期工作?如果我需要提供更多信息,请告诉我。

小智 2

我已经使用 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
Run Code Online (Sandbox Code Playgroud)

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

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

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

铬版本:

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

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