nginxで全ポートをlistenする
nginxで全ポートをlistenする方法です。 実験がてら作ってみた方法ですから、実際にこのような事をしたい場合は、 iptablesでREDIRECTする方が良いでしょう。
この手法を取ると、システム全体でネットワーク接続を発生できなくなります。
今回はどうしてもserver_portを利用したかったので、 このような力業を利用しました。
環境
- Debian 12 Bookworm
nginx-full 1.22.1-9+deb12u1(Debianのパッケージ)
ポート利用状況の確認
下記のコマンドでポートをLISTENしているプロセスが無いか確認します。 もしLISTENしているプロセスがあれば、そのポートを利用しない事を選択するか、 LISTENしているプロセスの停止を検討してください。
lsof -i | grep LISTEN
nginxのインストール
今回は、server_tokenをoffにしたいため、nginx-fullをインストールします。
apt install nginx-full
nginxの設定
まず、nginx.confのserver_tokens off;をコメントアウトし、
サーバのバージョン情報などを秘匿します。
65535ポートをv4とv6でlistenするため、
worker_connectionsとworker_rlimit_nofileを余裕を持って200000に設定します。
worker_rlimit_nofileはファイル先頭のworker_processesあたりに、
worker_connectionsはeventsセクションに設定します。
limits.confの設定
/etc/security/limits.confにwww-dataユーザの最大ファイル数を設定します。
先ほど設定した、worker_rlimit_nofileの値よりも大きい値を設定してください。
www-data soft nofile 200000
www-data hard nofile 200000
sysctlの設定
/etc/sysctl.confに下記の設定を追加します。
先ほどと同じように、fs.file-maxの値は、worker_rlimit_nofileの値よりも大きい値を設定してください。
fs.file-max = 200000
設定変更後、下記のコマンドで適用します。 この後再起動をするので、下記のステップは省略しても良いです。
sysctl -p
systemdの設定
/etc/systemd/system.confの[Manager]セクションにある、DefaultLimitNOFILEを設定します。
この値も、worker_rlimit_nofileの値よりも大きい値を設定してください。
[Manager]
# 省略
DefaultLimitNOFILE=200000
コメントアウトされている行ですから、コメントアウトして編集しても良いですし、 最後の方に追記してもかまいません。
サイトの設定
listenディレクティブは下記のようになります。
この例では、listenしたいインターフェイスのIPアドレスを1.2.3.4とcafe::1:2:3:4にしています。
環境に応じて変更してください。
listen 1.2.3.4:1-65535;
listen [cafe::1:2:3:4]:1-65535;
システムの再起動を行う
limites.confやsystemdの設定を行ったので、再起動を行います。
デフォルトでnginxが起動するはずですから、動作確認も同時に行ってください。