Red Hat Enterprise Linix 9 に http/3 対応のウェブサーバー(OpenLiteSpeed)を構築する

ConoHa Enterprise Linux 9
このサイトはアフィリエイト広告(Amazonアソシエイト含む)を掲載しています。
スポンサーリンク

前回からだいぶ間が空いてしまいましたが、ConoHa の VPS にインストールした RHEL9 上にウェブサーバーを導入していきます。

Red Hat Enterprise Linux 9 のファイアウォール(nftables)設定
ここまで ConoHa の VPS に RHEL9 をインストールする方法と、初期設定の解説をしてきました。今回はサーバー構築において、最も大事な部分であるファイアウォールの設定をしていきます。ファイアウォールの設定方針以前までは fire...

ちょうど最近 OpenLiteSpeed のリポジトリに CentOS 9 用が追加されていましたので、今回は LiteSpeed で構築し、http/3 にも対応させようと思います。

ConoHa VPS

OpenLiteSpeed の導入手順

リポジトリの追加

基本的に公式サイトの手順通りに進めれば問題ありません。

Page not found – OpenLiteSpeed
wget -O - https://repo.litespeed.sh | sudo bash

epel リポジトリは導入済みなのでスキップしましたが、まだの方は下記コマンドを実行してください。

subscription-manager repos --enable codeready-builder-for-rhel-9-$(arch)-rpms
(out) リポジトリー 'codeready-builder-for-rhel-9-x86_64-rpms' は、このシステムに対して有効になりました。
dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm

準備が整ったら OpenLiteSpeed をインストールします。

dnf install openlitespeed
(out) サブスクリプション管理リポジトリーを更新しています。
(out) Remi's Modular repository for Enterprise Linux 9 - x86_64                                                                      539  B/s | 833  B     00:01
(out) Remi's Modular repository for Enterprise Linux 9 - x86_64                                                                      3.0 MB/s | 3.1 kB     00:00
(out) GPG 鍵 0x478F8947 をインポート中:
(out)  Userid     : "Remi's RPM repository (https://rpms.remirepo.net/) <remi@remirepo.net>"
(out)  Fingerprint: B1AB F71E 14C9 D748 97E1 98A8 B195 27F1 478F 8947
(out)  From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-remi.el9
(out) これでよろしいですか? [y/N]: y
(out) Remi's Modular repository for Enterprise Linux 9 - x86_64                                                                      330 kB/s | 892 kB     00:02
(out) Safe Remi's RPM repository for Enterprise Linux 9 - x86_64                                                                     594  B/s | 833  B     00:01
(out) Safe Remi's RPM repository for Enterprise Linux 9 - x86_64                                                                     3.0 MB/s | 3.1 kB     00:00
(out) GPG 鍵 0x478F8947 をインポート中:
(out)  Userid     : "Remi's RPM repository (https://rpms.remirepo.net/) <remi@remirepo.net>"
(out)  Fingerprint: B1AB F71E 14C9 D748 97E1 98A8 B195 27F1 478F 8947
(out)  From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-remi.el9
(out) これでよろしいですか? [y/N]: y
(out) Safe Remi's RPM repository for Enterprise Linux 9 - x86_64                                                                     427 kB/s | 1.1 MB     00:02
(out) メタデータの期限切れの最終確認: 0:00:01 前の 2023年08月15日 09時48分42秒 に実施しました。
(out) 依存関係が解決しました。
(out) ===============================================================================================================================================================
(out)  パッケージ                              アーキテクチャー        バージョン                            リポジトリー                                      サイズ
(out) ===============================================================================================================================================================
(out) インストール:
(out)  openlitespeed                           x86_64                  1.7.17-1.el9                          litespeed                                          16 M
(out) 依存関係のインストール:
(out)  dejavu-sans-fonts                       noarch                  2.37-18.el9                           rhel-9-for-x86_64-baseos-rpms                     1.3 M
(out)  fontconfig                              x86_64                  2.14.0-2.el9_1                        rhel-9-for-x86_64-appstream-rpms                  301 k
(out)  fonts-filesystem                        noarch                  1:2.0.5-7.el9.1                       rhel-9-for-x86_64-baseos-rpms                      11 k
(out)  freetype                                x86_64                  2.10.4-9.el9                          rhel-9-for-x86_64-baseos-rpms                     391 k
(out)  fribidi                                 x86_64                  1.0.10-6.el9.2                        rhel-9-for-x86_64-appstream-rpms                   89 k
(out)  gd3php                                  x86_64                  2.3.3-9.el9.remi                      remi-safe                                         136 k
(out)  gdk-pixbuf2                             x86_64                  2.42.6-3.el9                          rhel-9-for-x86_64-appstream-rpms                  496 k
(out)  graphite2                               x86_64                  1.3.14-9.el9                          rhel-9-for-x86_64-baseos-rpms                      98 k
(out)  harfbuzz                                x86_64                  2.7.4-8.el9                           rhel-9-for-x86_64-baseos-rpms                     629 k
(out)  highway                                 x86_64                  1.0.5-1.el9                           epel                                               33 k
(out)  jbigkit-libs                            x86_64                  2.1-23.el9                            rhel-9-for-x86_64-appstream-rpms                   56 k
(out)  langpacks-core-font-en                  noarch                  3.0-16.el9                            rhel-9-for-x86_64-appstream-rpms                   11 k
(out)  libX11                                  x86_64                  1.7.0-7.el9                           rhel-9-for-x86_64-appstream-rpms                  648 k
(out)  libX11-common                           noarch                  1.7.0-7.el9                           rhel-9-for-x86_64-appstream-rpms                  210 k
(out)  libXau                                  x86_64                  1.0.9-8.el9                           rhel-9-for-x86_64-appstream-rpms                   34 k
(out)  libXpm                                  x86_64                  3.5.13-8.el9_1                        rhel-9-for-x86_64-appstream-rpms                   60 k
(out)  libaom                                  x86_64                  3.6.1-1.el9                           epel                                              1.8 M
(out)  libargon2                               x86_64                  20171227-7.el9                        epel                                               28 k
(out)  libavif                                 x86_64                  0.11.1-4.el9                          epel                                               81 k
(out)  libc-client                             x86_64                  2007f-30.el9.remi                     remi-safe                                         577 k
(out)  libdav1d                                x86_64                  1.2.1-1.el9                           epel                                              596 k
(out)  libimagequant                           x86_64                  2.17.0-1.el9                          epel                                               62 k
(out)  libjpeg-turbo                           x86_64                  2.0.90-6.el9_1                        rhel-9-for-x86_64-appstream-rpms                  178 k
(out)  libjxl                                  x86_64                  0.7.0-1.el9                           epel                                              957 k
(out)  libnsl                                  x86_64                  2.34-60.el9                           rhel-9-for-x86_64-baseos-rpms                      77 k
(out)  libpng                                  x86_64                  2:1.6.37-12.el9                       rhel-9-for-x86_64-baseos-rpms                     119 k
(out)  libraqm                                 x86_64                  0.8.0-1.el9                           epel                                               19 k
(out)  libtiff                                 x86_64                  4.4.0-8.el9_2                         rhel-9-for-x86_64-appstream-rpms                  200 k
(out)  libvmaf                                 x86_64                  2.3.0-2.el9                           epel                                              177 k
(out)  libwebp                                 x86_64                  1.2.0-6.el9_1                         rhel-9-for-x86_64-appstream-rpms                  281 k
(out)  libxcb                                  x86_64                  1.13.1-9.el9                          rhel-9-for-x86_64-appstream-rpms                  247 k
(out)  libxslt                                 x86_64                  1.1.34-9.el9                          rhel-9-for-x86_64-appstream-rpms                  247 k
(out)  libzip                                  x86_64                  1.7.3-7.el9                           rhel-9-for-x86_64-appstream-rpms                   65 k
(out)  lsphp74                                 x86_64                  7.4.33-2.el9                          litespeed-update                                  4.7 M
(out)  lsphp74-common                          x86_64                  7.4.33-2.el9                          litespeed-update                                  622 k
(out)  lsphp74-gd                              x86_64                  7.4.33-2.el9                          litespeed-update                                   39 k
(out)  lsphp74-imap                            x86_64                  7.4.33-2.el9                          litespeed-update                                   41 k
(out)  lsphp74-mbstring                        x86_64                  7.4.33-2.el9                          litespeed-update                                  469 k
(out)  lsphp74-mysqlnd                         x86_64                  7.4.33-2.el9                          litespeed-update                                  147 k
(out)  lsphp74-opcache                         x86_64                  7.4.33-2.el9                          litespeed-update                                  223 k
(out)  lsphp74-pdo                             x86_64                  7.4.33-2.el9                          litespeed-update                                   77 k
(out)  lsphp74-process                         x86_64                  7.4.33-2.el9                          litespeed-update                                   38 k
(out)  lsphp74-xml                             x86_64                  7.4.33-2.el9                          litespeed-update                                  128 k
(out)  oniguruma                               x86_64                  6.9.6-1.el9.5                         rhel-9-for-x86_64-appstream-rpms                  221 k
(out)  oniguruma5php                           x86_64                  6.9.8-1.el9.remi                      remi-safe                                         219 k
(out)  rav1e-libs                              x86_64                  0.6.6-1.el9                           epel                                              1.0 M
(out)  shared-mime-info                        x86_64                  2.1-5.el9                             rhel-9-for-x86_64-baseos-rpms                     561 k
(out)  svt-av1-libs                            x86_64                  0.9.0-1.el9                           epel                                              1.7 M
(out)  xml-common                              noarch                  0.6.3-58.el9                          rhel-9-for-x86_64-appstream-rpms                   36 k
(out) 弱い依存関係のインストール:
(out)  jxl-pixbuf-loader                       x86_64                  0.7.0-1.el9                           epel                                               53 k
(out) 
(out) トランザクションの概要
(out) ===============================================================================================================================================================
(out) インストール  51 パッケージ
(out) 
(out) ダウンロードサイズの合計: 36 M
(out) インストール後のサイズ: 144 M
(out) これでよろしいですか? [y/N]:y

GPG 鍵のインポートが必要な場合は「Y」でインポートしてください。

※インストールするとサービスが自動的に起動し、OS 起動時の自動実行にも追加されるので systemctl で start や enable は必要ありませんでした。

ファイアウォールの設定

OLS の管理画面は 7080 ポートを使用するため、管理者のみアクセスできるようにファイアウォールの設定を変更します。

また、HTTP/3 を有効にするためには UDP の 443 ポートも開放する必要があります。

chain TCP {
	# 管理者にのみ解放
	# ssh, OLS管理画面, ...
	tcp dport { 22, 7080, ... } ip saddr @admin accept

	# 日本国内にのみ開放
	# SMTPS, IMAPS
	tcp dport { 465, 993 } ip saddr @domestic accept

	# 全開放
	# SMTP, http, https
	tcp dport { 25, 80, 443 } accept
}

chain UDP {
	# 全開放
	# http/3
	udp dport { 443 } accept
}

上記を参考に nftables の設定ファイルを修正し、サービスをリスタート(systemctl restart nftables.service)してください。

ログファイルの場所をまとめる

ログファイルが作成されるディレクトリが /usr/local/lsws/logs のため、/var/log/lsws にシンボリックリンクを作成して纏めておきます。

ln -s /usr/local/lsws/logs/ /var/log/lsws

OLS 管理画面から各種設定

管理画面にログイン

初期パスワードは /usr/local/lsws/adminpasswd に記載されていますので、下記コマンドで参照できます。

cat /usr/local/lsws/adminpasswd
(out) WebAdmin user/password is admin/パスワード

ログインできたら、右上の「English」の部分をクリックして、日本語に変更しておきましょう。

また、最初にやっておく事として WebAdminの設定 > 一般 > ユーザー > 編集 と辿っていき、管理者パスワードを変更しておきましょう。

http ポートを 80 に変更

OLS の http ポートはデフォルトで 8088 ポートなので、80 番に変更していきます。

左のメニューから「リスナー」を開き、Default リスナーの「アクション」の項目にある虫眼鏡のアイコン(表示)をクリックします。

Default リスナーの一般設定が開きますので、アドレス設定の右にある編集ボタンをクリックします。

アドレス設定画面が開きますので、ポートを 80 に変更して保存します。

OLS を再起動し、ブラウザの新しいタブで「http://IPアドレス」にアクセスしてみます。

初期画面が表示されたら設定完了です。

SSL 証明書の取得

今回はこの手順は省略しますので、過去の記事などを参照してください。

ConoHa のユーザーなら API を使ったワイルドカード証明書がお勧めです。

Let’s Encrypt のワイルドカード証明書を ConoHa API で自動更新する
この記事は ConoHa VPS 2.0 API 向けの内容になります。Certbot を使って Let' Encrypt の SSL 証明書を取得するには、外部に公開されたウェブサーバーか DNS サーバーで認証する必要があります。Con...

VPS 割引きっぷを使っている方は、アルファ SSL でも大丈夫です。

ConoHa の VPS にアルファ SSL を設定する手順
ConoHa の VPS を使用する際に「VPS 割引きっぷ」を使って定期契約をすると、契約期間中は「アルファ SSL」が無料で利用できるというキャンペーンが始まった。ちょうど VPS 割引きっぷが適用されているサーバーがあったので、アルフ...

SSL 用リスナーの追加

再び OLS の管理画面から「リスナー」を選択し、リスナーリストを追加します。

ここではリスナー名を「SSL」とし、ポートを「443」に指定、セキュアを「はい」にして保存しました。

続いて SSL のタブに移動し SSL 秘密鍵 & 証明書の項目に、先ほど Let's Encrypt で取得した鍵と証明書を指定して保存します。

  • 秘密鍵ファイル:/etc/letsencrypt/live/ドメイン名/privkey.pem
  • 証明書ファイル:/etc/letsencrypt/live/ドメイン名/fullchain.pem
  • 証明書チェーン:はい

SSL プロトコルの編集画面で TLS v1.2 と TLS v1.3 にチェックを入れて保存します。

暗号の欄は空白にしておく事で、ベストプラクティスに従ったデフォルトの暗号を使用してくれるそうなので、下手に入力しない方が良さそうです。

セキュリティ & 機能の編集画面で下記のように設定します。

  • SSL再交渉保護:はい
  • ALPN:SPDY/3HTTP/2HTTP/3 にチェックを入れる

保存して OLS を再起動しましょう。

管理画面の SSL を変更

OLS 管理画面に https://ドメイン名:7080 でアクセスすると証明書エラーになるため、必要に合わせて変更しておくと良いでしょう。

  1. WebAdmin の設定からリスナーに進み「adminListener」を選択します。
  2. SSL 秘密鍵 & 証明書 の編集画面から下記を修正します。
  • 秘密鍵ファイル:$SERVER_ROOT/admin/conf/webadmin.key
  • 証明書ファイル:$SERVER_ROOT/admin/conf/webadmin.crt
  • 証明書チェーン:未設定

  • 秘密鍵ファイル:/etc/letsencrypt/live/ドメイン名/privkey.pem
  • 証明書ファイル:/etc/letsencrypt/live/ドメイン名/fullchain.pem
  • 証明書チェーン:はい
  1. 保存して OLS を再起動しましょう。

バーチャルホストの追加

続いてバーチャルホストを追加します。

Virtual Host Root はどこでも良いのですが、設定ファイルは「$SERVER_ROOT/conf/vhosts/$VH_NAME/vhconf.conf」にするのが推奨されているので、その通りにしました。

※保存しようとすると警告が出ますので、「CLICK TO CREATE」をクリックして設定ファイルを作成します。

作製したバーチャルホストの「一般」の Document Root を設定します。$VH_ROOT/html がお勧めのようです。

次に「コンテキスト」に移動し、HSTS(HTTP Strict Transport Security)の設定や、セキュリティ対策を施しておきます。

Page not found – OpenLiteSpeed
  • URI:/
  • 場所:$DOC_ROOT/
  • アクセス可能:はい
  • Header Operations:
    • Strict-Transport-Security: max-age=31536000; includeSubDomains
    • Content-Security-Policy "upgrade-insecure-requests;connect-src *"
    • Referrer-Policy strict-origin-when-cross-origin
    • X-Frame-Options: SAMEORIGIN
    • X-Content-Type-Options: nosniff
    • X-XSS-Protection 1;mode=block
    • Permissions-Policy: geolocation=(self "")

リスナーにバーチャルホストを紐づける

再びリスナーの項目に移動し、SSL に対して作成したバーチャルホストをマップします。

保存して OLS を再起動すれば、設定完了です。

Virtual Host Root にテスト用のファイルを設置し、「https://ドメイン名」でアクセスできることを確認してください。

http/3 で通信できているか確認する

http/3 通信ができているかチェックしてくれるサイトがあるので、そちらを利用してみます。

HTTP/3 Check
Is my site using HTTP3? Check HTTP3 service on any URL. Test QUIC service, too.

ドメインを入力して CHECK ボタンをクリックするだけで、簡単に診断することができます。

QUIC と HTTP/3 の両方に対応していることが確認できました。

SSL の安全性について確認する

Qualys SSL Labs で、SSL の安全性についても確認をしておきましょう。

SSL Server Test (Powered by Qualys SSL Labs)
A comprehensive free SSL test for your public web servers.

評価 A+ なので安心ですね。

php 8.2 にアップデートする

標準でインストールされる php のバージョンは 7.4 なので、現時点で最新バージョンの 8.2 をインストールしていきます。

dnf install lsphp82 lsphp82-mbstring lsphp82-mysqlnd
(out) =============================================================================================================================================================================================================================================================================================================================
(out)  パッケージ                                                                       アーキテクチャー                                                       バージョン                                                                   リポジトリー                                                                     サイズ
(out) =============================================================================================================================================================================================================================================================================================================================
(out) インストール:
(out)  lsphp82                                                                          x86_64                                                                 8.2.11-2.el9                                                                 litespeed-update                                                                 5.5 M
(out)  lsphp82-mbstring                                                                 x86_64                                                                 8.2.11-2.el9                                                                 litespeed-update                                                                 519 k
(out)  lsphp82-mysqlnd                                                                  x86_64                                                                 8.2.11-2.el9                                                                 litespeed-update                                                                 143 k
(out) 依存関係のインストール:
(out)  lsphp82-common                                                                   x86_64                                                                 8.2.11-2.el9                                                                 litespeed-update                                                                 658 k
(out)  lsphp82-pdo                                                                      x86_64                                                                 8.2.11-2.el9                                                                 litespeed-update                                                                  84 k
(out) 
(out) トランザクションの概要
(out) =============================================================================================================================================================================================================================================================================================================================
(out) インストール  5 パッケージ
(out) 
(out) ダウンロードサイズの合計: 6.9 M
(out) インストール後のサイズ: 34 M
(out) これでよろしいですか? [y/N]: y

新しい外部アプリとして追加

OLS の管理画面メニューから「サーバー設定」⇒「外部アプリ」と辿り、新しい外部アプリを追加します。

  • タイプ:LiteSpeed SAPI アプリ
  • 名前:lsphp82
  • アドレス:uds://tmp/lshttpd/lsphp82.sock
  • コマンド:$SERVER_ROOT/lsphp82/bin/lsphp

スクリプトハンドラを変更

一度 OLS を再起動し「サーバー設定」⇒「スクリプトハンドラ」の画面を開きます。

php のサフィックスに対するハンドラ名を、先ほど追加した lsphp82 に変更して保存します。

再び OLS を再起動します。

php のバージョンを確認

Virtual Host Root に phpinfo.php を作成します。

<?php
    phpinfo();
?>

ブラウザからアクセスすると、PHP Version 8.2 になっていることが確認できました。

確認ができたら phpinfo.php は削除しておきましょう。

Composer のインストール

まずは php-cli としても使えるように、シンボリックリンクを張ります。

ln -s /usr/local/lsws/lsphp82/bin/php /usr/bin/php

次に Composer のインストーラーをダウンロードして実行すると、composer.phar が作成されます。

これを /usr/local/bin/composer に移動することで、システム全体から利用できるようになります。

wget https://raw.githubusercontent.com/composer/getcomposer.org/76a7060ccb93902cd7576b67264ad91c8a2700e2/web/installer -O - -q | php -- --quiet
mv composer.phar /usr/local/bin/composer
How do I install Composer programmatically? - Composer
A Dependency Manager for PHP

Perl スクリプトにも対応させる

Perl による CGI スクリプトを動かす必要もあったので、対応させていきます。

FCGI のインストール

まずは FCGI をインストールします。

dnf install perl-FCGI
(out) サブスクリプション管理リポジトリーを更新しています。
(out) メタデータの期限切れの最終確認: 2:24:53 前の 2023年11月08日 08時27分10秒 に実施しました。
(out) 依存関係が解決しました。
(out) =============================================================================================================================================================================================================================================================================================================================
(out)  パッケージ                                                             アーキテクチャー                                                    バージョン                                                                   リポジトリー                                                                                  サイズ
(out) =============================================================================================================================================================================================================================================================================================================================
(out) インストール:
(out)  perl-FCGI                                                              x86_64                                                              1:0.79-8.el9                                                                 rhel-9-for-x86_64-appstream-rpms                                                               51 k

外部アプリの追加

OLS の管理画面メニューから「サーバー設定」⇒「外部アプリ」と辿り、新しい外部アプリを追加します。

  • タイプ:FastCGI アプリ
  • 名前:PerlFastCGI
  • アドレス:uds://tmp/lshttpd/perl.sock
  • コマンド:$SERVER_ROOT/fcgi-bin/lsperld.fpl

設定を保存したら、OLS を再起動します。

スクリプトハンドラの追加

次に「サーバー設定」⇒「スクリプトハンドラ」の画面を開き、新しいスクリプトハンドラの定義を追加します。

  • サフィックス:cgi, pl
  • ハンドラタイプ:Fast CGI
  • ハンドラ名:PerlFastCGI

設定を保存したら、OLS を再起動します。

コンテキストの追加

バーチャルホストのリストから Perl スクリプトを有効にしたいホストを選択し、コンテキストのタブから CGI コンテキストを追加します。

バーチャルホスト直下の /cgi-bin/ ディレクトリに perl スクリプトを配置する設定例は下記の通りです。

  • URI:/cgi-bin/
  • パス:$VH_ROOT/cgi-bin/

設定を保存したら、OLS を再起動します。

Perl スクリプトの配置

$VH_ROOT/cgi-bin/ にテスト用のスクリプトを作成します。

#!/usr/bin/perl
print "Content-type: text/html\n\n";
print `perl -v`;

パーミッションを 755 に変更します。

chmod 755 /var/www/vhosts/XXXXX/cgi-bin/test.cgi

ブラウザからアクセスして、表示できるか確認してください。

表示が確認出来たら、test.cgi は削除しておきましょう。

まとめ

管理画面からほとんどすべての操作ができるのはとても便利だと感じました。

最初はどこを操作したら良いか戸惑う部分もありましたが、慣れれば何とかなりそうですね。

以上で基本的な OpenLiteSpeed の設定は完了です。

ConoHa VPS

次回はデータベースサーバーを構築します。

Red Hat Enterprise Linix 9 にデータベースサーバー(MariaDB)を構築する
前回は OpenLiteSpeed でウェブサーバーを構築しましたが、今回はその続きとしてデータベースサーバーを構築していきます。MariaDB のインストール今回は、サポート期限の長い MariaDB 10.11(LTS)を選択しました。...

コメント

タイトルとURLをコピーしました