助け合いフォーラム

LPIC

LPIC Lv2-202(Ver4.5)
問題ID : 9875
問題を開く
「/etc/nginx/nginx.conf」ファイルの構文をチェックするコマンドは次のうちどれか。

この問題はプレミアムコンテンツです。

上に戻る

リバースプロキシの設定の流れが分からない

投稿日 2023/07/31

>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フィールドの内容を格納する意味はなんでしょうか

2023/08/01 23:51

ご質問の意図を読み違えてたらすみません。
「元のリクエストヘッダに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フィールドが含まれている こういうことでしょうか…!?

o ojixii

2023/08/06 22:45

お返事遅くなってすみません。旅行を楽しんでました! まず、ご存じかもしれませんが念のため。。 HTTPリクエスト中のHostフィールド(Hostヘッダフィールド)はHTTP/1.1以降では必須のフィールドで、アクセスするサーバ名(とポート番号)の情報です。 https://e-words.jp/w/Host%E3%83%98%E3%83%83%E3%83%80.html (Hostフィールドが「ある」「ない」みたいな書き方されてたので、 そもそもHostフィールドは HTTPリクエスト中にあって、中身の情報が書き換わっちゃってるんですよ、 ということを言いたかったです。) > HTTPリクエストヘッダの動きとしては以下だと認識しています > クライアント→①→Nginx(リバースプロキシ)→②→プロキシ先 > > >・デフォルトでは、Hostフィールドには クライアントからのHostフィールドが含まれてない > ①の段階ではHostフィールドがあり、②ではHostフィールドが含まれていない ① の段階では、Hostフィールドはクライアントのリクエストそのままの Host: example.com みたいな感じですが、② の段階では Host: 192.168.1.10 のように Nginx が書き換えてしまうということです。 > (しかしクライアント←Nginxの向きでホスト名「192.168.1.10」が送られる) クライアント ← Nginx へ 192.168.1.10 が送られるわけではないです。 > >・クライアントからのHostフィールドをプロキシ先のサーバへ送りたいような場合 > ①の段階ではHostフィールドがある > Nginxの「proxy_set_header」と変数$hostを使って、「proxy_set_header Host $host;」と設定ファイルに記述されている > ②Hostフィールドが含まれている ①の段階では「クライアントのリクエストそのままのHostフィールド(上の例の場合 "Host: example.com")」です。 「proxy_set_header Host $host;」と設定すると、 変数$host には ①の「クライアントのリクエストそのままのHostフィールド」が格納されてますから、 ② のHostフィールドを ①のようにできる(上の例の場合 "Host: example.com") ということです。 こちらも参考になるかもしれません。 https://www.xmisao.com/2013/10/17/nginx-proxy-host-header.html

k kajiniwa

2023/08/10 13:52

>① の段階では、Hostフィールドはクライアントのリクエストそのままの Host: example.com みたいな感じですが、② の段階では Host: 192.168.1.10 のように Nginx が書き換えてしまうということです。 この説明でモヤモヤしていたHTTPリクエストの動きがよく分かりました…!ありがとございました。よく分からない質問の仕方だったと思いますが、ここまで掘り下げていただけて大変分かりやすかったです。 私事になりますが、本日202の試験に受かることができました…! ここまでお付き合いいただきありがとございました!私も心置きなく旅行を楽しみたいと思います。

この返信に対して
コメントを記入できます

この投稿に対して返信しませんか?