こんにちは、 ITインフラエンジニアのKomura(@system_kom)です。
CentOS Linux 8.0 サポート終了のお知らせ
CentOSのメジャーバージョン「CentOS Linux 8.0」は、2021年12月31日に開発グループのCentOS Projectがサポートを終了しています。代わりのOSとしては「AlmaLinux」か「Rocky Linux」をオススメします。
-
【Linuxサーバー構築】CentOSの代替OS AlmaLinux 8.5をインストールする手順
こんにちは、ITインフラエンジニアのKomura(@system_kom)です。 先日まで行っていたLinuxでのウェブサーバー構築もひと段落付き、しばらくゆっくりとできそうです。ところで「AlmaLinux」というLinuxディストリ ...
CentOS 8にウェブサーバー「Apache httpd」と「PHP」をインストールした環境でSSLを有効化する手順を以下の記事で紹介しました。CentOS 8のApache httpdでは「HTTP/1.1」を拡張したプロトコルで通信パフォーマンスを向上させる「HTTP/2」を利用することができます。
参考 CentOS 8のApache httpdでSSLを有効にする手順を紹介した記事
-
CentOS 8 のApache HTTP Server環境にcertbotでLet's Encrypt SSLを利用する方法
CentOS 8にウェブサーバー用ソフトウェア「Apache httpd」と「PHP」をインストールする手順を以下の記事で紹介しました。このままでも運用はできますが、最近ではHTTPを暗号化するHTTPSが一般的になっています。 サーバーが ...
今回はCentOS 8にインストールしたApache httpdで「HTTP/2」を有効にする設定方法を説明していきます。
ウェブサイトの処理速度や表示速度のアップはSEOにも関係するため「HTTP/2」はウェブ系エンジニアには必須の知識です。ぜひ、実際に設定してウェブサイトのパフォーマンスをアップして下さい。
1. HTTP/2通信規格について
「HTTP/2」はHTTPの通信を効率よく行うことができるように、従来の「HTTP/1.1」をバージョンアップしたHTTPの通信規格です。
HTTP/1.1の場合1つのリクエストが終了するまで、次のリクエストを送ることができません。これが大きな通信速度遅延の要因のひとつでした。「HTTP/2」通信規格では、複数の要求を1つの接続で行うことができるため、サイトの速度向上に期待が出来ます。
多少、分かり難い説明だと思います。実際の動きについては、以下のサイトで視覚的に確認が出来ます。
またHTTP/2プロトコルについて、更に詳しく知りたい方には以下のサイトがオススメです。
本記事と合わせて参考にしてみて下さい。
なお、HTTP/2については現在「HTTPS」プロトコルでしか利用することができません。その為、本記事の設定を行う場合には、事前にサイトのSSL化が必要となる点にご注意下さい。CentOS 8でサイトをSSL化するための手順は、以下の記事で詳しく紹介しています。
-
CentOS 8 のApache HTTP Server環境にcertbotでLet's Encrypt SSLを利用する方法
CentOS 8にウェブサーバー用ソフトウェア「Apache httpd」と「PHP」をインストールする手順を以下の記事で紹介しました。このままでも運用はできますが、最近ではHTTPを暗号化するHTTPSが一般的になっています。 サーバーが ...
SSL化を行っていない場合は参考にして下さい。それではHTTP/2を利用するための具体的な手順を紹介していきます。
2. HTTP/2を有効にする環境
HTTP/2を有効にする環境は、1章の中で紹介した記事を元に構築した「Apache httpd」ウェブサーバーを利用します。
-
CentOS 8 のApache HTTP Server環境にcertbotでLet's Encrypt SSLを利用する方法
CentOS 8にウェブサーバー用ソフトウェア「Apache httpd」と「PHP」をインストールする手順を以下の記事で紹介しました。このままでも運用はできますが、最近ではHTTPを暗号化するHTTPSが一般的になっています。 サーバーが ...
設定を行うウェブサーバーの基本的な環境は以下の通りです。
CentOS 8にセットアップしたApache httpdの環境
- ウェブサーバーとしてApache httpd 2.4.37がインストール済み
- アプリケーションサーバーとしてPHP 7.2.11がインストール済み
- Apache httpdはバーチャルホストの設定が完了して、テストページが表示されている
- Apache httpdはcertbotによるSSL設定が完了している
- サーバーにはグローバルIPアドレス(111.8.21.167)が割り当て済み
- ドメインはrem-system.comを利用
- ファイアウォールとしてfirewalldを設定済み
この環境を前提に「HTTP/2」通信を有効にする設定を進めていきます。
http/2を設定するバーチャルホストはSSLを有効にしたサイト「srv01.rem-system.com」になります。
3. ApacheでHTTP/2を利用するための前提
Apache httpdで「HTTP/2」を有効にするためには、以下の2点が設定されている必要があります。
- マルチスレッド機能であるeventMPMが有効になっていること
- SSLが有効になっていること
MPMについては4章で詳しく説明しますが、CentOS 8に採用されているApache httpdのバージョン2.4.37はeventMPMがデフォルトで有効になっているため設定変更は不要です。
もう一つの条件である「SSL」については無償のSSLプロジェクトであるLet's EncryptのSSL証明書がサーバーに導入済みです。従ってHTTP/2有効化に必要な2点の設定はクリアしています。
4. Apache httpdのMPMについて
本章ではApache httpdのMPMを確認する手順を説明します。HTTP/2を有効にするためApache httpdではeventMPMで動作する必要があります。
MPMはマルチプロセッシングモジュールの略で、Apacheの並列処理に関する挙動の方式になります。MPMはその名の通り、Apacheのモジュールとして提供されており、設定ファイルを変更することで、MPMの変更が可能です。
MPMは主に以下の3つのモジュールがあります。
preforkMPM | 安定した通信が可能だが、アクセスが多い場合CPUとメモリを多く使う |
workerMPM | マルチスレッドとマルチプロセスのハイブリッド型。preforkに比べてメモリとCPU使用量が少ない |
eventMPM | Apache2.4系から導入されたマルチスレッドとマルチプロセスのモジュール。CPUとメモリの使用量が少ない |
CentOS 8ではApache httpdを"dnf"でパッケージからインストールした場合、デフォルトではeventMPMモジュールが読み込まれるように設定されています。「HTTP/2」はeventMPMで動作するためMPMの変更は不要です。本章では有効化されているMPMモジュールの確認方法について紹介します。
4-1. デフォルトのApache httpdに設定されているMPMの確認
MPMは動的モジュール(DSO)として読み込まれています。現状で有効になっているMPMを確認します。読み込まれているモジュールの確認は"httpd"コマンドに"-M"オプションを付けて実行します。
command
# httpd -M | grep mpm
mpm_event_module (shared)
結果として「mpm_event_module (shared)」が表示されれば、確認は完了です。上記の結果からMPMとして「eventMPM」が有効になっていることが確認できます。
5. Apache httpd へのHTTP/2の設定
本章ではApache httpdをHTTP/2通信に対応させるための設定手順について紹介します。ウェブサーバーではeventMPMとSSLの両方が設定済みになっていますので、設定を追加するだけでHTTP/2を利用できます。
5-1. http2モジュールの確認
HTTP/2通信機能はApache httpdのモジュールとして用意されています。CentOS 8でパッケージからApache httpdをインストールした場合にはhttp/2モジュールはデフォルトで有効になっています。
念のためにモジュールが有効になっていることを確認します。読み込まれているモジュールの確認は"httpd"コマンドに"-M"オプションを付けて実行します。
command
# httpd -M | grep http2
http2_module (shared)
proxy_http2_module (shared)
結果として「http2_module (shared)」が表示されれば、確認は完了です。上記の結果から「http2_module」が有効になっていることが確認できます。
5-2. バーチャルホスト用設定ファイルの変更
つぎに「HTTP/2通信」を行うように設定パラメータを変更します。変更するファイルはhttp/2を有効にするバーチャルホスト「srv01.rem-system.com」用の設定ファイルになります。
バーチャルホスト「srv01.rem-system.com」の設定は「/etc/httpd/conf.d」以下に作成した「srv01.rem-system.com.conf」で行います。srv01.rem-system.com.confの編集前に、既存のファイルを別名でバックアップしておきます。以下の手順で元ファイルのコピーを行います
command
# cp -p /etc/httpd/conf.d/srv01.rem-system.com.conf /etc/httpd/conf.d/srv01.rem-system.com.conf.org
バックアップの完了後、viエディタで設定ファイルを開いてhttp/2を有効にするためのパラメータ追記を行います。
command
# vi /etc/httpd/conf.d/srv01.rem-system.com.conf
追記する前の設定ファイルは以下の内容になります。
code
## VirtualHost03 srv01.rem-system.com
<VirtualHost *:80>
ServerName srv01.rem-system.com
DocumentRoot "/home/www/html/srv01.rem-system.com"
<Directory "/home/www/html/srv01.rem-system.com">
Options FollowSymLinks
AllowOverride All
Order deny,allow
Allow from all
</Directory>
ErrorLog logs/srv01.rem-system.com.jp-error_log
CustomLog logs/srv01.rem-system.com-access_log combined
</VirtualHost>
<VirtualHost *:443>
SSLEngine on
ServerName srv01.rem-system.com
DocumentRoot "/home/www/html/srv01.rem-system.com"
SSLCertificateFile /etc/letsencrypt/live/srv01.rem-system.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/srv01.rem-system.com/privkey.pem
<Directory "/home/www/html/srv01.rem-system.com">
Options FollowSymLinks
AllowOverride All
Order deny,allow
Allow from all
</Directory>
ErrorLog logs/srv01.rem-system.com-ssl-error_log
CustomLog logs/srv01.rem-system.com-ssl-access_log combined
</VirtualHost>
上記設定の<VirtualHost *:443>ディレクティブの下の行にHTTP/2通信を有効にするための設定であるパラメータ"Protocols"を追加します。
code <VirtualHost *:443> Protocols h2 http/1.1 この行を追加 SSLEngine on ServerName srv01.rem-system.com DocumentRoot "/home/www/html/srv01.rem-system.com" SSLCertificateFile /etc/letsencrypt/live/srv01.rem-system.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/srv01.rem-system.com/privkey.pem <Directory "/home/www/html/srv01.rem-system.com"> Options FollowSymLinks AllowOverride All Order deny,allow Allow from all </Directory> ErrorLog logs/srv01.rem-system.com-ssl-error_log CustomLog logs/srv01.rem-system.com-ssl-access_log combined </VirtualHost>
上記ではHTTP/2通信を優先的に利用し、対応していないブラウザでは従来通りにHTTP/1.1を利用するという設定になります。追記が終わったら、ファイルを保存します。これでバーチャルホスト用設定ファイルの修正は完了です。
5-3. 変更した設定ファイルの確認
バーチャルホスト用の設定ファイルについて修正が完了したら、ファイルに間違いや問題がないかを確認します。"httpd"コマンドに"-t"オプションを付けて実行することで設定ファイルの間違いをチェックできます。以下のように実行します。
Apache httpdの設定変更後には都度、実行することをお勧めします。
command
# httpd -t
Syntax OK
「Syntax OK」と表示されれば修正したファイルには問題ありません。
設定ファイルの確認が完了しましたので、変更した設定を反映するためにhttpdを再起動します。"systemctl restart"コマンドを以下のように実行します。
command
# systemctl restart httpd
エラーが無ければ、再起動は完了しています。再起動後にhttpdのステータスを"systemctl status"コマンドで確認します。
command $ systemctl status httpd ● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled) Drop-In: /usr/lib/systemd/system/httpd.service.d mqphp-fpm.conf Active: active (running) since Fri 2019-11-22 17:04:35 JST; 6s ago Docs: man:httpd.service(8) Main PID: 2254 (httpd) Status: "Started, listening on: port 443, port 80" Tasks: 213 (limit: 11374) Memory: 26.2M CGroup: /system.slice/httpd.service tq2254 /usr/sbin/httpd -DFOREGROUND tq2256 /usr/sbin/httpd -DFOREGROUND tq2257 /usr/sbin/httpd -DFOREGROUND tq2258 /usr/sbin/httpd -DFOREGROUND mq2259 /usr/sbin/httpd -DFOREGROUND 11月 22 17:04:35 www systemd[1]: Stopped The Apache HTTP Server. 11月 22 17:04:35 www systemd[1]: Starting The Apache HTTP Server... 11月 22 17:04:35 www httpd[2254]: Server configured, listening on: port 443, port 80 11月 22 17:04:35 www systemd[1]: Started The Apache HTTP Server.
正常に起動していることが、コマンドの結果に含まれる「Active: active (running) 」から確認できました。ここまでの手順でApache httpdのhttp/2設定と反映が完了しました。
6. HTTP/2の動作確認
HTTP/2通信が動作していることをブラウザに実装されている開発ツールを利用して確認していきます。利用しているブラウザはGoogle Chromeになります。
6-1. HTTP/2通信の確認
HTTP/2を有効にしたバーチャルホストのウェブページを開きます。
Google Chromeのデベロッパーツール(その他のツール>デベロッパーツール)を起動します。「Network」を選択して、ページをリロードします。
表示される「Name」などのカラムを右クリックすると、表示項目の追加メニューが表示されます。「Protocol」にチェックを入れます。
再度ページをリロードすると、接続プロトコルが表示されます。本環境では以下のように「h2」と表示されることから、HTTP/2通信が行われていることが確認できました。
HTTP/1.1で通信している場合には一旦、ブラウザのキャッシュを削除してみて再度、ページを表示させて下さい。
7. まとめ
HTTP/2は最近では利用されている環境をよく見かけるようになりました。今後はHTTPS通信とHTTP/2通信はセットで運用することが一般的になっていくと思います。この機会にHTTPS通信とHTTP/2通信を導入してみてはどうでしょうか。
HTTP/2を有効にするためのSSL設定にやや手間が掛かりますが、そこさえクリアしてしまえば難しい手順はありません。是非、SSLとHTTP/2を有効にしてサイトの安全性とパフォーマンス向上を行ってみて下さい。