今回紹介するのは 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 に対応されています。
ただ、サーバー側に注意していただきたい点があります。
- HTTP/3 には UDP 443 ポートを使用します。
まだポートを開けてない場合は、セキュリティルールを変更して UDP 443 ポートを開けてください。 - 自己署名証明書(通称、オレオレ証明書)では HTTP/3 が有効にならないケースがあります。
kusanagi ssl
を使用するなどして証明書を取得してください。 - 既に Nginx 1.25.1 より前 (<1.25.1) にプロビジョンしたプロファイルがある場合は、 KUSANAGI を最新化し
--update-conf
オプションを使用して Nginx の設定ファイルを最新化してください。
参考:KUSANAGI9モジュール更新情報 | KUSANAGI
また、クライアント側にも注意していただきたい点があります。
- 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