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_tokenoffにしたいため、nginx-fullをインストールします。

apt install nginx-full

nginxの設定

まず、nginx.confserver_tokens off;をコメントアウトし、 サーバのバージョン情報などを秘匿します。

65535ポートをv4とv6でlistenするため、 worker_connectionsworker_rlimit_nofileを余裕を持って200000に設定します。

worker_rlimit_nofileはファイル先頭のworker_processesあたりに、 worker_connectionseventsセクションに設定します。

limits.confの設定

/etc/security/limits.confwww-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.4cafe::1:2:3:4にしています。 環境に応じて変更してください。

listen 1.2.3.4:1-65535;
listen [cafe::1:2:3:4]:1-65535;

システムの再起動を行う

limites.confsystemdの設定を行ったので、再起動を行います。 デフォルトでnginxが起動するはずですから、動作確認も同時に行ってください。

参考サイト

最終更新 May 10, 2025 14:01 PM JST
Built with Hugo
テーマ StackJimmy によって設計されています。