LinuCレベル2 Webサーバーとプロキシサーバー 問22
Webサーバーとプロキシサーバー/nginxの設定と管理nginxをリバースプロキシとして使う設定で、proxy_passとあわせて「proxy_http_version 1.1;」を記述することが多い。nginx 1.29.6以前(RHEL 9・Debian 12・Ubuntu 24.04の標準パッケージが該当)を前提としたとき、その理由として適切なものはどれか。
当サイトのオリジナル問題(LinuCレベル2の出題範囲「Webサーバーとプロキシサーバー」に対応。実際の試験問題ではありません)
- A既定ではバックエンドへHTTP/1.0で接続するため、keepaliveやWebSocketに1.1が必要になる
- B既定ではクライアントとHTTP/2で通信するため、クライアント側の通信を1.1に制限する必要がある
- C既定ではバックエンドへ平文で接続するため、1.1を指定してHTTPSでの接続に切り替える必要がある
- D既定ではServerヘッダーに古い版数が表示されるため、応答ヘッダーの版数表記を更新する必要がある
正解:A
解説
proxy_http_versionは、nginxがプロキシ先(バックエンド)へ送るリクエストのHTTPバージョンを指定するディレクティブで、1.29.6以前の既定値は1.0です(1.29.7で既定値が1.1に変更されましたが、現行ディストリビューションの標準パッケージは変更前の版です)。バックエンドとの接続をkeepaliveで再利用する場合や、WebSocketを中継する場合にはHTTP/1.1が必要なため、1.1を指定します。keepaliveではあわせてproxy_set_header Connection ""; でConnectionヘッダーを空にし、WebSocketではUpgradeとConnectionヘッダーを転送します。バックエンドへHTTPSで接続するかどうかはproxy_passのURLのスキーム(https://)で決まります。
選択肢ごとの解説
- A正しい。1.29.6以前のproxy_http_versionの既定値は1.0で、バックエンドとのkeepaliveやWebSocketの中継にはHTTP/1.1を指定する必要があります。
- B誤り。proxy_http_versionはバックエンドへのリクエストのバージョンを決めるもので、クライアント側でHTTP/2を使うかどうかはlistenのhttp2指定等で決まります。
- C誤り。バックエンドへHTTPSで接続するかどうかはproxy_passに書くURLのスキームで決まり、HTTPのバージョン指定とは関係ありません。
- D誤り。Serverヘッダーの版数表示を制御するのはserver_tokensで、proxy_http_versionは応答ヘッダーの表記を変えるものではありません。