kusanagi nginx で HTTP/3 に対応する

片倉洋一

WebサーバーNginx設定変更や切り替えを行えるコマンド、kusanagi nginxについて紹介します。Apacheよりも高速、高負荷に耐えうるNginxは、現在Webサーバーのシェアトップです。Nginxの再起動や最新化がミスなく行え、その設定切替やHTTP/3への対応が可能です。また、ApacheからNginxへの切り替えも簡単に行えます。Nginx設定ファイルのチェックやNginxサービスの再起動、再読み込みも可能。便利なkusanagi nginxコマンドの活用をおすすめします。

今回紹介するのは kusanagi nginx コマンドです。

kusanagi nginx コマンドは KUSANAGI で利用する Web サーバーの Nginx の設定変更や切り替えをコマンドラインから実行するコマンドです。

Nginx とは前述したように Web サーバーの一つですが、 Nginx が登場するまで主流の Web サーバーは Apache でした。
Apache と比較して Nginx が優れている点は、非同期のノンブロッキングとイベントドリブンアーキテクチャを採用していることで、Apache よりも高速かつ高負荷に耐えられる点です。
現在の Web サーバーのシェアは Apache を抜いてトップとなっています。

※参考記事:NginxとApacheの比較 〜 ウェブサーバー直接対決 〜 (2023)

KUSANAGI でもデフォルトは Nginx での稼働を考えており、kusanagi nginx コマンドはその Nginx の再起動や最新化がミスなく行えるコマンドです。

なお、Nginx の HTTP/3 対応がメインラインに取り込まれたので、最新の KUSANAGI も HTTP/3 に対応しました。
従来の環境を HTTP/3 対応の環境に設定を変更することも、このコマンドで行えます。

HTTP/3 については前回のコラム「KUSANAGI 9 が対応した HTTP/3 とは」にも詳しく記載されていますので、ぜひ参照してみてください。

それでは kusanagi nginx コマンドでできることを一つずつ見ていきましょう。

Apache から Nginx へ切り替え

稼働している Web サーバーを Nginx に切り替える場合は kusanagi nginx と入力します。

例として、現在稼働している Web サーバーが Apache であるとします。

# kusanagi status (プロファイル名)
Profile: (プロファイル名)
FQDN: (FQDN)
Type: wp
KUSANAGI Version 9.3.1-1.el8
(クラウド名)

*** (inactive) nginx : nginx125 ***
* nginx.service - The NGINX HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
   Active: inactive (dead)

*** (active) httpd : httpd ***
* httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2023-07-05 18:05:53 JST; 18s ago
:
:
#

それを Nginx に切り替えるために kusanagi nginx と入力します。

# kusanagi nginx
nginx: the configuration file /etc/opt/kusanagi/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/opt/kusanagi/nginx/nginx.conf test is successful
Removed /etc/systemd/system/multi-user.target.wants/httpd.service.
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service -> /usr/lib/systemd/system/nginx.service.
nginx completed.
#

kusanagi status で稼働している Web サーバーを確認します。

# kusanagi status (プロファイル名)
Profile: (プロファイル名)
FQDN: (FQDN)
Type: wp
KUSANAGI Version 9.3.1-1.el8
(クラウド名)

*** (active) nginx : nginx125 ***
* nginx.service - The NGINX HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2023-07-05 18:07:59 JST; 16s ago

*** (inactive) httpd : httpd ***
* httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
:
:
#

稼働している Web サーバーが Nginx に切り替わったことが確認できました。

Nginx の設定ファイルのチェック

現在稼働している Nginx の設定ファイルをチェックするには、 --test オプションをつけます。

# kusanagi nginx --test
nginx: the configuration file /etc/opt/kusanagi/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/opt/kusanagi/nginx/nginx.conf test is successful
nginx completed.
#

現在の Nginx 設定ファイルのパスとともに、設定ファイルに問題がないか確認できます。
上記の例では、設定ファイルに問題がないパターンです。

# kusanagi nginx --test
nginx: [emerg] invalid log level "warm" in /etc/opt/kusanagi/nginx/conf.d/nginx_test.conf:51
nginx: configuration file /etc/opt/kusanagi/nginx/nginx.conf test failed
nginx -t failed, change or restart to NGINX aborted.
kusanagi nginx: error: command returned 1
kusanagi nginx: error: nginx failed
#

こちらは設定ファイルに問題があるパターンです。
ご覧のように、エラーを起こしている設定ファイルやその行、内容を表示してくれます。

Nginx の設定ファイルを変更した場合には、一度このコマンドを実行して設定ファイルに問題がないか確認するのに便利です。

Nginx サービスの再起動

現在稼働している Nginx サービスを再起動するには Web サーバーの切り替えと同じで kusanagi nginx と入力します。

# kusanagi nginx
nginx: the configuration file /etc/opt/kusanagi/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/opt/kusanagi/nginx/nginx.conf test is successful
nginx completed.
#

これにより Nginx サービスが再起動されます。
ただこの方法はサービスが再起動されてしまうため、クライアントとのセッションが切断されてしまうということが起きます。

設定ファイルを変更して、セッションを切断せずに設定ファイルの再読み込みをさせたいのであれば、 --reload というオプションがあります。

# kusanagi nginx --reload
nginx: the configuration file /etc/opt/kusanagi/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/opt/kusanagi/nginx/nginx.conf test is successful
nginx completed.
#

画面で見える結果は同じですが、設定ファイルの再読み込みがされました。

再読み込みの方がセッションが切断されない分便利なのに、なぜ再起動があるんだ? と思われるかもしれませんが、一部の設定の変更にはサービスの再起動を伴わないと反映されないケースもあります。
例えば、 SSL 証明書を設置した場合にはサービスの再起動が必要です。
そのため、基本的には設定を変更したら再読み込み、それでも設定が反映されない場合は再起動と、使い分けをしてみてください。

Nginx のバージョンの切り替え

稼働している Nginx のバージョンを変更したい場合は、 --use (指定のバージョン) というオプションを使用します。

例として、現在の稼働している Nginx のバージョンが 1.24 だとします。

# kusanagi status (プロファイル名)
Profile: (プロファイル名)
FQDN: (FQDN)
Type: wp
KUSANAGI Version 9.3.1-1.el8
(クラウド名)

*** (active) nginx : nginx124 ***
* nginx.service - The NGINX HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2023-07-06 09:59:25 JST; 3min 2s ago
:
:
#

そのバージョンを 1.25 に上げたい場合は、 --use nginx125 とオプションをつけて実行します。

# kusanagi nginx --use nginx125
Last metadata expiration check: 0:39:49 ago on Thu Jul  6 09:26:25 2023.
Dependencies resolved.
================================================================================
 Package                 Architecture Version             Repository       Size
================================================================================
Installing:
 kusanagi-nginx125       x86_64       1.25.1-1.el8        kusanagi        5.6 M
Removing:
 kusanagi-nginx124       x86_64       1.24.0-2.el8        @kusanagi        18 M

Transaction Summary
================================================================================
Install  1 Package
Remove   1 Package

Total download size: 5.6 M
Downloading Packages:
kusanagi-nginx125-1.25.1-1.el8.x86_64.rpm        38 MB/s | 5.6 MB     00:00
--------------------------------------------------------------------------------
Total                                            37 MB/s | 5.6 MB     00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                        1/1
  Running scriptlet: kusanagi-nginx125-1.25.1-1.el8.x86_64                  1/1
  Running scriptlet: kusanagi-nginx125-1.25.1-1.el8.x86_64                  1/2
  Installing       : kusanagi-nginx125-1.25.1-1.el8.x86_64                  1/2
  Running scriptlet: kusanagi-nginx125-1.25.1-1.el8.x86_64                  1/2
  Erasing          : kusanagi-nginx124-1.24.0-2.el8.x86_64                  2/2
  Running scriptlet: kusanagi-nginx124-1.24.0-2.el8.x86_64                  2/2
  Verifying        : kusanagi-nginx125-1.25.1-1.el8.x86_64                  1/2
  Verifying        : kusanagi-nginx124-1.24.0-2.el8.x86_64                  2/2

Installed:
  kusanagi-nginx125-1.25.1-1.el8.x86_64
Removed:
  kusanagi-nginx124-1.24.0-2.el8.x86_64

Complete!
nginx: the configuration file /etc/opt/kusanagi/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/opt/kusanagi/nginx/nginx.conf test is successful
nginx completed.
#

kusanagi status で Nginx のバージョンを確認します。

# kusanagi status (プロファイル名)
Profile: (プロファイル名)
FQDN: (FQDN)
Type: wp
KUSANAGI Version 9.3.1-1.el8
(クラウド名)

*** (active) nginx : nginx125 ***
* nginx.service - The NGINX HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2023-07-06 10:06:20 JST; 29s ago
:
:
#

このように、 Nginx のバージョンが 1.25 に上がりました。

--use オプションはバージョンを上げることはもちろん、下げることも可能です。
あまりケースとしては多くないでしょうが、何らかの事情により下げたい場合にも対応できます。
対応可能なバージョンは、最下部に記載した KUSANAGI 9 のマニュアルを参照してください。

Nginx を HTTP/3 に対応させる

Nginx を HTTP/3 に対応させるには、現在稼働している Nginx のバージョンを 1.25 にするだけです。
そのため、最新の KUSANAGI で Nginx 1.25 をプロビジョンした場合や、先ほどの --use nginx125 を使用して古いバージョンから 1.25 に引き上げた場合は既に HTTP/3 に対応されています。
ただ、サーバー側に注意していただきたい点があります。

  1. HTTP/3 には UDP 443 ポートを使用します。
    まだポートを開けてない場合は、セキュリティルールを変更して UDP 443 ポートを開けてください。
  2. 自己署名証明書(通称、オレオレ証明書)では HTTP/3 が有効にならないケースがあります。
    kusanagi ssl を使用するなどして証明書を取得してください。
  3. 既に Nginx 1.25.1 より前 (<1.25.1) にプロビジョンしたプロファイルがある場合は、 KUSANAGI を最新化し --update-conf オプションを使用して Nginx の設定ファイルを最新化してください。
    参考:KUSANAGI9モジュール更新情報 | KUSANAGI

また、クライアント側にも注意していただきたい点があります。

  1. http:// でアクセスしますと HTTP/1.1 になるので、https:// でアクセスしてください。

それでは、 本当に HTTP/3 で通信しているかを確認してみようと思います。
まずは、Nginx 1.24 で Web サーバーを起動します。

# kusanagi nginx --use nginx124
Last metadata expiration check: 2:02:02 ago on Thu Jul  6 13:14:14 2023.
Dependencies resolved.
================================================================================
 Package                 Architecture Version             Repository       Size
================================================================================
Installing:
 kusanagi-nginx124       x86_64       1.24.0-2.el8        kusanagi        5.6 M
Removing:
 kusanagi-nginx125       x86_64       1.25.1-1.el8        @kusanagi        18 M
:
:
Complete!
nginx: the configuration file /etc/opt/kusanagi/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/opt/kusanagi/nginx/nginx.conf test is successful
nginx completed.
#

ブラウザを使用して、対象の Web サーバーがどのプロトコルで通信しているか確認します。
Chrome を例にすると、まず F12 を押しデベロッパーツールを開き、タブで「Network」を選択します。

確認対象のサイトにアクセスするか F5 を押してサイトをリロードすると、Network タブに通信内容が表示されます。
この「Protocol」が通信しているプロトコルになります。
現在は「h2」ということで、 HTTP/2 で通信していることが確認できます。

それでは、--use nginx125 を使用して Nginx のバージョンを 1.25 に変更します。

# kusanagi nginx --use nginx125
Last metadata expiration check: 2:05:59 ago on Thu Jul  6 13:14:14 2023.
Dependencies resolved.
================================================================================
 Package                 Architecture Version             Repository       Size
================================================================================
Installing:
 kusanagi-nginx125       x86_64       1.25.1-1.el8        kusanagi        5.6 M
Removing:
 kusanagi-nginx124       x86_64       1.24.0-2.el8        @kusanagi        18 M
:
:
Complete!
nginx: the configuration file /etc/opt/kusanagi/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/opt/kusanagi/nginx/nginx.conf test is successful
nginx completed.
#

Nginx のバージョンが 1.25 に変更されました。
再度先ほどのサイトにアクセスします。

先ほどの「Protocol」が「h3」になっていると思います。
もしなっていない場合は、何度かリロードを繰り返すかブラウザを閉じるなどしてサーバーとのセッションを更新してください。
この「h3」が HTTP/3 で通信しているということになります。

このように最新の KUSANAGI と Nginx であれば HTTP/3 に対応されていることが分かると思います。

kusanagi nginx コマンドでできることは以上になります。

HTTP/3 への対応など KUSANAGI は日々進化して新しい機能を取り入れています、皆様ぜひとも活用してみてください。

KUSANAGI 9 コマンドのマニュアル (nginx) :https://kusanagi.tokyo/kusanagi9/document/commands/#nginx

<< KUSANAGIコマンドの実行結果を確認するKUSANAGIプラグインの「テーマアクセラレーター」の紹介 >>

関連記事

Webサイト運用の課題解決事例100選 プレゼント

Webサイト運用の課題を弊社プロダクトで解決したお客様にインタビュー取材を行い、100の事例を108ページに及ぶ事例集としてまとめました。

・100事例のWebサイト運用の課題と解決手法、解決後の直接、間接的効果がわかる

・情報通信、 IT、金融、メディア、官公庁、学校などの業種ごとに事例を確認できる

・特集では1社の事例を3ページに渡り背景からシステム構成まで詳解