LinuCレベル2 Webサーバーとプロキシサーバー 問18
Webサーバーとプロキシサーバー/nginxの設定と管理nginxで、HTTP(80番ポート)へのアクセスを同じURLのHTTPSへ恒久的にリダイレクトするserverブロック内の記述として適切なものはどれか。
当サイトのオリジナル問題(LinuCレベル2の出題範囲「Webサーバーとプロキシサーバー」に対応。実際の試験問題ではありません)
- Areturn 302 https://$host$request_uri;
- Breturn 301 https://$host$request_uri;
- Cproxy_pass https://$host$request_uri;
- Dreturn 200 https://$host$request_uri;
正解:B
解説
nginxでは、returnディレクティブにステータスコードとURLを指定するとリダイレクトの応答を返せます。恒久的な移転を表すのは301(Moved Permanently)で、$hostにリクエストのホスト名、$request_uriに引数を含むパスが入るため、同じURLのHTTPS版へ誘導できます。一時的な転送であれば302や307を使います。rewriteディレクティブのpermanentフラグでも301を返せますが、単純な転送ではreturnのほうが簡潔で効率的とされています。
選択肢ごとの解説
- A誤り。302は一時的なリダイレクト(Found)を表すため、恒久的な転送という条件に合いません。
- B正しい。301を返すことで、同じホスト名とパスのHTTPS版への恒久的なリダイレクトになります。
- C誤り。proxy_passはリクエストをバックエンドへ転送するリバースプロキシの設定で、クライアントへリダイレクトを返すものではありません。
- D誤り。returnに200を指定すると、URLの文字列を本文とした通常の応答を返すだけで、リダイレクトにはなりません。