/
カテゴリー

概要

情報システム部門に所属しているI君は業務で使用するためにNginxを構築したが、起動せず繋がらない。原因を究明して繋がるようにして欲しい。なおセキュリティご事情的に外部からはファイル等を取得できない環境である。

前提条件

  • aptなどを使用して外部から新規でnginxをインストールすることは禁止されている
  • /etc/netplan/01-netcfg.yamlを変更してはならない
  • /var/lib/apt/lists/以下を変更してはならない

初期状態

/usr/local/nginx/sbin/nginxしてもエラーが出て起動しない。

終了状態

サーバから

curl --http2 localhost

を行いリソースが取得できる。

解説

この問題ではオプション無しでビルドされたNginxにhttp2に関するモジュールが存在していないためエラーが発生しhttp2を使いたいが、起動できないという問題でした。

問題環境内にビルドするためのファイル一式があるので、http2モジュールを含むオプションを行い実行することでnginx.confを変更することなく解くことが出来ました。また、終了条件を満たせていれば良いためnginx.confhttp2を削除することでもcurlが通るためそれも満点としています。

想定解

Nginxを実行すると以下のエラーが確認できる。

sudo /usr/local/nginx/sbin/nginx 
nginx: [emerg] the "http2" parameter requires ngx_http_v2_module in /usr/local/nginx/conf/nginx.conf:36

ビルドする際にモジュールを導入しビルドする

cd ~/nginx-1.21.1
./confiure --with-http_v2_module
make
sudo make build

Nginxを起動

sudo /usr/local/nginx/sbin/nginx

curlでIndex.htmlが取得できる

curl --http2 localhost

別解

viなどのエディタでnginx.confを以下のように編集

listen 443 http2 -> listen 80

Nginxを起動

sudo /usr/local/nginx/sbin/nginx

curlでIndex.htmlが取得できる

curl --http2 localhost