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。
これが私が今のところそれを解決した方法です:
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要求は処理しないことを望んでいます。