web-dev-qa-db-ja.com

Nginx TCP Fast Open Issue

サーバーの1つで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 page)を構成しました。tcp_fastopen設定クライアントでは1に設定されています。

サーバーでは、次のgrepを使用して、TCP FastOpenが使用されているかどうかを確認します。

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が使用され、期待どおりに機能するかどうかを実際に確認する方法はありますか?さらに情報を提供する必要がある場合はお知らせください。

4
Daniel Kanchev

TCP fast open test code at 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オプションの下にFastOpenCookieがはっきりと表示されます。

ChromiumとNginxを使用して同じペアのマシンでテストしました。

Chromiumバージョン:

Debian Stretch/sid上に構築されたバージョン55.0.2883.75、Debian Stretch/sid(64ビット)で実行

Wiresharkトレースに高速オープンCookieはありません。 Chromiumで高速オープンオプションが有効になっている場合でも。ですから、問題はクロムにあるのではないかと思います。

2
Tim Bray