助け合いフォーラム
この問題はプレミアムコンテンツです。
リバースプロキシの設定の流れが分からない
>Nginxがクライアントから受け取ったHTTPのリクエストヘッダのHostフィールドは、デフォルトではプロキシ先には転送されない仕様になっており、代わりにプロキシ先のホスト名が送られます(上記の場合は192.168.1.10)。
NginxからHTTPのリクエストヘッダのHostフィールドに192.168.1.10を教えてあげる
>「proxy_set_header」を利用することでリクエストヘッダフィールドを再定義または追加できます。変数$hostには元のリクエストヘッダのHostフィールドの内容が格納されている
「proxy_set_header Host $host;」とすると受け取ったリクエストヘッダのHostフィールドの内容が格納される
>元のHostフィールドをプロキシ先に転送することが出来ます
ここがよく分かりません。元のリクエストヘッダに192.168.1.10を教えてそこに行けるようにする(これも解釈があっているのか分かりませんが)のは納得できるのですが、その後のHostフィールドの内容を格納する意味はなんでしょうか
ご質問の意図を読み違えてたらすみません。
「元のリクエストヘッダに192.168.1.10を教える」というのがちょっとよくわからなかったのですが、
ここで言ってるのは、
・デフォルトでは、Hostフィールドには クライアントからのHostフィールドが含まれてない
(その代わりに プロキシサーバのホスト名(例の場合は 192.168.1.10)が送られる)
・クライアントからのHostフィールドをプロキシ先のサーバへ送りたいような場合には
「proxy_set_header」と変数$hostを使って、「proxy_set_header Host $host;」のようにする
ということなんじゃないかなあと思います。。
コメント
この投稿に対して返信しませんか?
k kajiniwa
2023/08/02 21:41
回答していただきありがとうございます!もう少しお付き合いいただけたら幸いです。 HTTPリクエストヘッダの動きとしては以下だと認識しています クライアント→①→Nginx(リバースプロキシ)→②→プロキシ先 >・デフォルトでは、Hostフィールドには クライアントからのHostフィールドが含まれてない ①の段階ではHostフィールドがあり、②ではHostフィールドが含まれていない (しかしクライアント←Nginxの向きでホスト名「192.168.1.10」が送られる) >・クライアントからのHostフィールドをプロキシ先のサーバへ送りたいような場合 ①の段階ではHostフィールドがある Nginxの「proxy_set_header」と変数$hostを使って、「proxy_set_header Host $host;」と設定ファイルに記述されている ②Hostフィールドが含まれている こういうことでしょうか…!?