Apache には、mod_bandwidth など、vhost ごとの帯域幅使用量を制限するための優れたソリューションがいくつかあります。ただし、nginx を使い始めてから、各サーバー ブロックの帯域幅使用量を制限および監視する方法が見つかりませんでした。
nginx 上のサーバー ブロックごとの帯域幅使用量の監視と制限に関する提案をいくつか聞きたいです。
答え1
帯域幅を制限するために使用できますlimit_rate
。私の場合、これは nginx のコミュニティ バージョンでも機能します。
たとえば、次のようにして、サーバー ブロック全体の帯域幅を 1 秒あたり 1000 バイトに制限できます。
server {
listen 80;
location / {
limit_rate 1k;
}
}
答え2
Nginx Plus には、ホストごとに帯域幅を調整するオプションが組み込まれています。
nginx のコミュニティ バージョンでこれを実現する場合は、2 つのオプションがあります (IP ごとの帯域幅のプーリングのみが含まれるため)。
1: 外部ツールまたは IP テーブルを使用して、nginx プロセス全体の帯域幅を制限します。
2: この特定のコンテンツをプロキシパス経由でlighttpdに提供し、lighttpdでサーバースロットルを設定します。
server.kbytes-per-second = 6250
downloads.domain.net を制限したい場合、Lighthttpd の設定は次のようになります。
server.port = 81
server.document-root = "/path/to/downloads"
index-file.names = ( )
nginx: いいえ
server {
listen 80;
server_name downloads.domain.net;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://127.0.0.1:81;
}
}
もちろん、特定のファイルやフォルダなどでプロキシすることもできます。
最終的に: これを使用し、さらにポート 80 (および 443) のトラフィック全体を ip-table でスロットリングすることは、帯域幅の特定のポイントを超えたくない場合の究極の解決策です。(たとえば、VoIP サービスでは、http トラフィックにハード リミットが必要になる場合があります)