カテゴリー
Linux

Nginx のポート関係の変数を実際に出力して確認してみた

Nginx のポート関係の変数

  • $proxy_port: proxy_pass ディレクティブの中で指定されたプロキシされるサーバのポート番号、あるいはプロトコルのデフォルトのポート番号;
  • $proxy_protocol_port: PROXYプロトコルヘッダからのクライアントポート、そうでなければ空文字 (1.11.0)。 PROXYプロトコルはlistenディレクティブのproxy_protocol パラメータの設定によって前もって有効にされていなければなりません。
  • $proxy_protocol_server_port: server port from the PROXY protocol header (1.17.6). The PROXY protocol must be previously enabled by setting the proxy_protocol parameter in the listen directive.
  • $realip_remote_port: 元のクライアントポートを保持します
  • $remote_port: クライアントのポート
  • $server_port: リクエストを受け付けたサーバのポート

以上、公式ページとその日本語訳のページから抜粋でした。

変数の値を調べるために Nginx 設定ファイルに加えた変更点

/etc/nginx/conf.d/default.conf に次の変更を加えました。

$proxy_protocol_server_port は Nginx のバージョンが低いために使用できませんでしたので、コメントにいたしました。

$ diff -up default.conf.202002140654 default.conf
--- default.conf.202002140654   2020-02-14 06:54:59.584823973 +0900
+++ default.conf        2020-02-14 07:16:29.581498321 +0900
@@ -35,6 +35,14 @@ server {
     proxy_set_header X-Forwarded-Port $server_port;
     proxy_cache_valid 200 404 1d;

+    add_header test test;
+    add_header test_proxy_port                 $proxy_port;
+    add_header test_proxy_protocol_port        $proxy_protocol_port;
+    #add_header test_proxy_protocol_server_port $proxy_protocol_server_port;
+    add_header test_realip_remote_port         $realip_remote_port;
+    add_header test_remote_port                $remote_port;
+    add_header test_server_port                $server_port;
+
     location ~ /\. {deny all; access_log off; log_not_found off; }
     location = /robots.txt  { access_log off; log_not_found off; }
     location = /favicon.ico { access_log off; log_not_found off; }

結果

ウェブサイトのトップページを表示し、 Response Headers を確認した結果がこちらです。

test: test
test_realip_remote_port: 43951
test_remote_port: 43951
test_server_port: 443

これら以外は出力されませんでした。 proxy 系は、設定を記述する場所がよくなかったのでしょう。

remote_port 系は、クライアントのポートということでしたので、ウェブブラウザのポート、ということなのでしょう。 server_port は、サーバのポートということで、 Nginx のポートであり、大抵は 80 と 443 のどちらかを開放しますから、今回は 443 であった、というように理解することができます。

おわりに

WordPress サイトヘルスの critical issue 2 つを解決したメモ – oki2a24 でポート番号を Nginx 設定に追加いたしました。最終的に $server_port を設定いたしましたけれども、これに至るまでに実は迷いました。 Nginx の変数でポート関係のものがいくつかあったためです。

今回、全てを理解、とまではいきませんでしたけれども、断片的にでも理解ができ、 $server_port の設定で間違いではなかったと納得できましたので、良かったです。

デバッグするのに参考になったページです。ありがとうございました!!

以上です。

コメントを残す