LinuCレベル2 Webサーバーとプロキシサーバー 問34
Webサーバーとプロキシサーバー/nginxの設定と管理nginxのserverブロックに「listen 443;」と書き、ssl_certificateとssl_certificate_keyでサーバー証明書と秘密鍵を指定した。ところが、ブラウザからhttps://で接続するとTLSのエラーになり、443番ポートでは暗号化されていないHTTPが応答している。listenの行の書き方として適切なものはどれか。
当サイトのオリジナル問題(LinuCレベル2の出題範囲「Webサーバーとプロキシサーバー」に対応。実際の試験問題ではありません)
- Alisten 443 default_server;
- Blisten 443 ssl;
- Clisten 443 proxy_protocol;
- Dlisten 443 reuseport;
正解:B
解説
nginxでは、listenディレクティブにsslパラメータを付けたポートだけがTLSで接続を受け付けます。ssl_certificateやssl_certificate_keyを書いても、listenにsslが無ければそのポートは通常のHTTPとして動作します。古い設定で見られる「ssl on;」ディレクティブは1.15.0で非推奨になり、1.25.1で削除されており、現在はlistenのsslパラメータを使います。HTTPとHTTPSを1つのserverブロックで扱う場合は、listen 80; と listen 443 ssl; を並べて書けます。
選択肢ごとの解説
- A誤り。default_serverは、Hostヘッダーに一致するserver_nameが無いときに使う既定のserverブロックを指定するパラメータです。
- B正しい。sslパラメータを付けると、そのポートでTLSによる接続を受け付けます。
- C誤り。proxy_protocolは、前段のロードバランサ等から送られるPROXYプロトコルのヘッダーを受け付けるためのパラメータです。
- D誤り。reuseportは、ワーカープロセスごとに個別の待ち受けソケットを作らせるためのパラメータです。