Nginx TCP快速开放问题

我在我的一台服务器上configuration了Nginx和Apache。 nginx服务器在端口80上侦听端口80,在端口81上侦听Apache。Nginx作为反向代理。 在nginx中我configuration了TCP Fast Open:

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

TCP快速打开也在服务器上启用:

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

为了testing这个工作是否正常,我在运行Ubuntu的PC上configuration了Chrome,使用TCP Fast Open(chrome:// flags page)。 客户端上的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,并按预期工作? 让我知道如果我需要提供一些更多的信息。

我在https://github.com/yuryu/tfoecho使用TCP快速打开testing代码做了一些testing

使用testing代码时,我的计数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同一对机器进行了testing。

铬版本:

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

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