過去問ドリル

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

解説

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は応答ヘッダーの表記を変えるものではありません。
LinuCレベル2の問題を演習モードで解く