Debian 6.0.1でプロキシとして動作するnginx/1.0.12は、短時間実行した後に次のエラーを投げ始めます。nginx proxy:connect()to ip:80 failed(99:要求されたアドレスを割り当てることができません)
connect() to upstreamip:80 failed (99: Cannot assign requested address) while connecting to upstream, client: xxx.xxx.xxx.xxx, server: localhost, request: "GET/HTTP/1.1", upstream: "http://upstreamip:80/", host: "requesteddomain.com"
すべてのリクエストでこのエラーが発生するわけではありません。そのため、サーバーの負荷や何らかの制限がかかる場合があります。
ulimit -nを50kに、worker_rlimit_nofileを50kに上げようとしましたが、それは役に立たないようです。 lsof -nは、nginxの合計で1200行を表示します。 nginxがアップストリームサーバーへの接続をさらに開けないようにするために、発信接続にシステム制限がありますか?
問題がDOS攻撃ではなくTIME_WAITの結果であったが、より速いTIME_WAITタイムアウトで終了するはずの通常のトラフィックが膨大であったため、これが役に立ったかどうかはわかりません。 – mariow
@mariow、私のサーバーには、非常に多くの発信要求(クローラ)がありますので、TIME_WAITを再利用することは必須です。 – diyism
net.ipv4.tcp_tw_recycleが壊れているとLinux 4.12から削除されました: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=4396e46187ca5070219b81773c4e65088dac50cc 再利用も危険です: https://vincent.bernat.im/en/blog/2014-tcp-time-wait-state-linux これらのオプションは使用しないでください。 – pva