web-dev-qa-db-ja.com

TCP HTTP / 2のnginxとの接続を制限する方法は?

Nginxをhttpsフロントエンドとして使用したいのですが、TCP接続を制限する方法を探しています。これらの制限はリモートIPアドレスに基づいており、HTTP/1.1およびHTTP 2

HTTP/1.1の場合、IPごとに約15の同時接続で問題ないと思いました(ほとんどのブラウザーは最大6つを使用しているようです)が、HTTP/2。しかし nginx docs は次のように述べています:

HTTP/2およびSPDYでは、各同時リクエストは個別の接続と見なされます。

そして HTTP/2仕様SETTINGS_MAX_CONCURRENT_STREAMSパラメータについて述べています:

並列処理を不必要に制限しないように、この値は100以上にすることをお勧めします。

これは、リモートIPごとに少なくとも100の接続を許可する必要があることを意味しますか?私のテストではそう思われますが、何かが足りないのかもしれません。これは本質的に、同時TCP接続の数に意味のある制限を設定できないことを意味するため、深刻な制限なしにHTTP/2

2
Brutus

これが私が今のところそれを解決した方法です:

map $http2 $v1ip {
    default "";
    ""  $binary_remote_addr;
}
map $http2 $v2ip {
    default $binary_remote_addr;
    "" "";
}

limit_conn_zone $v1ip zone=v1ips:10m;
limit_conn v1ips 10;

limit_conn_zone $v2ip zone=v2ips:10m;
limit_conn v2ips 125;

HTTP/2の接続制限はそれほど高くなければならないので、レート制限も追加しました…しかし、私はまだ値を微調整しています。

[〜#〜] note [〜#〜]:これにより、HTTP <2接続に「適切な」値を設定できますが、それでも— imo不要— HTTP /に多数の同時接続が必要です。 2つの接続。 limit_connがTCP接続のみを処理し、HTTP要求は処理しないことを望んでいます。

2
Brutus