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
が起動するはずですから、動作確認も同時に行ってください。