前回からだいぶ間が空いてしまいましたが、ConoHa の VPS にインストールした RHEL9 上に Web サーバーを導入していきます。
ちょうど最近 OpenLiteSpeed のリポジトリに CentOS 9 用が追加されていましたので、今回は LiteSpeed で構築し、http/3 にも対応させようと思います。
OpenLiteSpeed の導入手順
リポジトリの追加
基本的に公式サイトの手順通りに進めれば問題ありません。
1 | # wget -O - https://repo.litespeed.sh | sudo bash |
epel リポジトリは導入済みなのでスキップしましたが、まだの方は下記コマンドを実行してください。
1 2 3 | # subscription-manager repos --enable codeready-builder-for-rhel-9-$(arch)-rpms リポジトリー 'codeready-builder-for-rhel-9-x86_64-rpms' は、このシステムに対して有効になりました。 # dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm |
準備が整ったら OpenLiteSpeed をインストールします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | # dnf install openlitespeed サブスクリプション管理リポジトリーを更新しています。 Remi's Modular repository for Enterprise Linux 9 - x86_64 539 B/s | 833 B 00:01 Remi's Modular repository for Enterprise Linux 9 - x86_64 3.0 MB/s | 3.1 kB 00:00 GPG 鍵 0x478F8947 をインポート中: Userid : "Remi's RPM repository (https://rpms.remirepo.net/) <remi@remirepo.net>" Fingerprint: B1AB F71E 14C9 D748 97E1 98A8 B195 27F1 478F 8947 From : /etc/pki/rpm-gpg/RPM-GPG-KEY-remi.el9 これでよろしいですか? [y/N]: y Remi's Modular repository for Enterprise Linux 9 - x86_64 330 kB/s | 892 kB 00:02 Safe Remi's RPM repository for Enterprise Linux 9 - x86_64 594 B/s | 833 B 00:01 Safe Remi's RPM repository for Enterprise Linux 9 - x86_64 3.0 MB/s | 3.1 kB 00:00 GPG 鍵 0x478F8947 をインポート中: Userid : "Remi's RPM repository (https://rpms.remirepo.net/) <remi@remirepo.net>" Fingerprint: B1AB F71E 14C9 D748 97E1 98A8 B195 27F1 478F 8947 From : /etc/pki/rpm-gpg/RPM-GPG-KEY-remi.el9 これでよろしいですか? [y/N]: y Safe Remi's RPM repository for Enterprise Linux 9 - x86_64 427 kB/s | 1.1 MB 00:02 メタデータの期限切れの最終確認: 0:00:01 前の 2023年08月15日 09時48分42秒 に実施しました。 依存関係が解決しました。 =============================================================================================================================================================== パッケージ アーキテクチャー バージョン リポジトリー サイズ =============================================================================================================================================================== インストール: openlitespeed x86_64 1.7.17-1.el9 litespeed 16 M 依存関係のインストール: dejavu-sans-fonts noarch 2.37-18.el9 rhel-9-for-x86_64-baseos-rpms 1.3 M fontconfig x86_64 2.14.0-2.el9_1 rhel-9-for-x86_64-appstream-rpms 301 k fonts-filesystem noarch 1:2.0.5-7.el9.1 rhel-9-for-x86_64-baseos-rpms 11 k freetype x86_64 2.10.4-9.el9 rhel-9-for-x86_64-baseos-rpms 391 k fribidi x86_64 1.0.10-6.el9.2 rhel-9-for-x86_64-appstream-rpms 89 k gd3php x86_64 2.3.3-9.el9.remi remi-safe 136 k gdk-pixbuf2 x86_64 2.42.6-3.el9 rhel-9-for-x86_64-appstream-rpms 496 k graphite2 x86_64 1.3.14-9.el9 rhel-9-for-x86_64-baseos-rpms 98 k harfbuzz x86_64 2.7.4-8.el9 rhel-9-for-x86_64-baseos-rpms 629 k highway x86_64 1.0.5-1.el9 epel 33 k jbigkit-libs x86_64 2.1-23.el9 rhel-9-for-x86_64-appstream-rpms 56 k langpacks-core-font-en noarch 3.0-16.el9 rhel-9-for-x86_64-appstream-rpms 11 k libX11 x86_64 1.7.0-7.el9 rhel-9-for-x86_64-appstream-rpms 648 k libX11-common noarch 1.7.0-7.el9 rhel-9-for-x86_64-appstream-rpms 210 k libXau x86_64 1.0.9-8.el9 rhel-9-for-x86_64-appstream-rpms 34 k libXpm x86_64 3.5.13-8.el9_1 rhel-9-for-x86_64-appstream-rpms 60 k libaom x86_64 3.6.1-1.el9 epel 1.8 M libargon2 x86_64 20171227-7.el9 epel 28 k libavif x86_64 0.11.1-4.el9 epel 81 k libc-client x86_64 2007f-30.el9.remi remi-safe 577 k libdav1d x86_64 1.2.1-1.el9 epel 596 k libimagequant x86_64 2.17.0-1.el9 epel 62 k libjpeg-turbo x86_64 2.0.90-6.el9_1 rhel-9-for-x86_64-appstream-rpms 178 k libjxl x86_64 0.7.0-1.el9 epel 957 k libnsl x86_64 2.34-60.el9 rhel-9-for-x86_64-baseos-rpms 77 k libpng x86_64 2:1.6.37-12.el9 rhel-9-for-x86_64-baseos-rpms 119 k libraqm x86_64 0.8.0-1.el9 epel 19 k libtiff x86_64 4.4.0-8.el9_2 rhel-9-for-x86_64-appstream-rpms 200 k libvmaf x86_64 2.3.0-2.el9 epel 177 k libwebp x86_64 1.2.0-6.el9_1 rhel-9-for-x86_64-appstream-rpms 281 k libxcb x86_64 1.13.1-9.el9 rhel-9-for-x86_64-appstream-rpms 247 k libxslt x86_64 1.1.34-9.el9 rhel-9-for-x86_64-appstream-rpms 247 k libzip x86_64 1.7.3-7.el9 rhel-9-for-x86_64-appstream-rpms 65 k lsphp74 x86_64 7.4.33-2.el9 litespeed-update 4.7 M lsphp74-common x86_64 7.4.33-2.el9 litespeed-update 622 k lsphp74-gd x86_64 7.4.33-2.el9 litespeed-update 39 k lsphp74-imap x86_64 7.4.33-2.el9 litespeed-update 41 k lsphp74-mbstring x86_64 7.4.33-2.el9 litespeed-update 469 k lsphp74-mysqlnd x86_64 7.4.33-2.el9 litespeed-update 147 k lsphp74-opcache x86_64 7.4.33-2.el9 litespeed-update 223 k lsphp74-pdo x86_64 7.4.33-2.el9 litespeed-update 77 k lsphp74-process x86_64 7.4.33-2.el9 litespeed-update 38 k lsphp74-xml x86_64 7.4.33-2.el9 litespeed-update 128 k oniguruma x86_64 6.9.6-1.el9.5 rhel-9-for-x86_64-appstream-rpms 221 k oniguruma5php x86_64 6.9.8-1.el9.remi remi-safe 219 k rav1e-libs x86_64 0.6.6-1.el9 epel 1.0 M shared-mime-info x86_64 2.1-5.el9 rhel-9-for-x86_64-baseos-rpms 561 k svt-av1-libs x86_64 0.9.0-1.el9 epel 1.7 M xml-common noarch 0.6.3-58.el9 rhel-9-for-x86_64-appstream-rpms 36 k 弱い依存関係のインストール: jxl-pixbuf-loader x86_64 0.7.0-1.el9 epel 53 k トランザクションの概要 =============================================================================================================================================================== インストール 51 パッケージ ダウンロードサイズの合計: 36 M インストール後のサイズ: 144 M これでよろしいですか? [y/N]:y |
GPG 鍵のインポートが必要な場合は「Y」でインポートしてください。
※インストールするとサービスが自動的に起動し、OS 起動時の自動実行にも追加されるので systemctl で start や enable は必要ありませんでした。
ファイヤーウォールの設定
OLS の管理画面は 7080 ポートを使用するため、管理者のみアクセスできるようにファイヤーウォールの設定を変更します。
また、HTTP/3 を有効にするためには UDP の 443 ポートも開放する必要があります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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 にシンボリックリンクを作成して纏めておきます。
1 | # ln -s /usr/local/lsws/logs/ /var/log/lsws |
OLS 管理画面から各種設定
管理画面にログイン
初期パスワードは /usr/local/lsws/adminpasswd に記載されていますので、下記コマンドで参照できます。
1 2 | # cat /usr/local/lsws/adminpasswd WebAdmin user/password is admin/パスワード |
ログインできたら、右上の「English」の部分をクリックして、日本語に変更しておきましょう。
また、最初にやっておく事として WebAdminの設定 > 一般 > ユーザー > 編集 と辿っていき、管理者パスワードを変更しておきましょう。
http ポートを 80 に変更
OLS の http ポートはデフォルトで 8088 ポートなので、80 番に変更していきます。
左のメニューから「リスナー」を開き、Default リスナーの「アクション」の項目にある虫眼鏡のアイコン(表示)をクリックします。
Default リスナーの一般設定が開きますので、アドレス設定の右にある編集ボタンをクリックします。
アドレス設定画面が開きますので、ポートを 80 に変更して保存します。
OLS を再起動し、ブラウザの新しいタブで「http://IPアドレス」にアクセスしてみます。
初期画面が表示されたら設定完了です。
SSL 証明書の取得
今回はこの手順は省略しますので、過去の記事などを参照してください。
ConoHa のユーザーなら API を使ったワイルドカード証明書がお勧めです。
VPS 割引きっぷを使っている方は、アルファ SSL でも大丈夫です。
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/3、HTTP/2、HTTP/3 にチェックを入れる
保存して OLS を再起動しましょう。
管理画面の SSL を変更
OLS 管理画面に https://ドメイン名:7080 でアクセスすると証明書エラーになるため、必要に合わせて変更しておくと良いでしょう。
- WebAdmin の設定からリスナーに進み「adminListener」を選択します。
- SSL 秘密鍵 & 証明書 の編集画面から下記を修正します。
- 秘密鍵ファイル:$SERVER_ROOT/admin/conf/webadmin.key
- 証明書ファイル:$SERVER_ROOT/admin/conf/webadmin.crt
- 証明書チェーン:未設定
↓
- 秘密鍵ファイル:/etc/letsencrypt/live/ドメイン名/privkey.pem
- 証明書ファイル:/etc/letsencrypt/live/ドメイン名/fullchain.pem
- 証明書チェーン:はい
- 保存して 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)の設定や、セキュリティ対策を施しておきます。
- 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 通信ができているかチェックしてくれるサイトがあるので、そちらを利用してみます。
ドメインを入力して CHECK ボタンをクリックするだけで、簡単に診断することができます。
QUIC と HTTP/3 の両方に対応していることが確認できました。
SSL の安全性について確認する
Qualys SSL Labs で、SSL の安全性についても確認をしておきましょう。
評価 A+ なので安心ですね。
php 8.2 にアップデートする
標準でインストールされる php のバージョンは 7.4 なので、現時点で最新バージョンの 8.2 をインストールしていきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | # dnf install lsphp82 lsphp82-mbstring lsphp82-mysqlnd ============================================================================================================================================================================================================================================================================================================================= パッケージ アーキテクチャー バージョン リポジトリー サイズ ============================================================================================================================================================================================================================================================================================================================= インストール: lsphp82 x86_64 8.2.11-2.el9 litespeed-update 5.5 M lsphp82-mbstring x86_64 8.2.11-2.el9 litespeed-update 519 k lsphp82-mysqlnd x86_64 8.2.11-2.el9 litespeed-update 143 k 依存関係のインストール: lsphp82-common x86_64 8.2.11-2.el9 litespeed-update 658 k lsphp82-pdo x86_64 8.2.11-2.el9 litespeed-update 84 k トランザクションの概要 ============================================================================================================================================================================================================================================================================================================================= インストール 5 パッケージ ダウンロードサイズの合計: 6.9 M インストール後のサイズ: 34 M これでよろしいですか? [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 を作成します。
1 2 3 | <?php phpinfo(); ?> |
ブラウザからアクセスすると、PHP Version 8.2 になっていることが確認できました。
確認ができたら phpinfo.php は削除しておきましょう。
Composer のインストール
まずは php-cli としても使えるように、シンボリックリンクを張ります。
1 | # ln -s /usr/local/lsws/lsphp82/bin/php /usr/bin/php |
次に Composer のインストーラーをダウンロードして実行すると、composer.phar が作成されます。
これを /usr/local/bin/composer に移動することで、システム全体から利用できるようになります。
1 2 | # wget https://raw.githubusercontent.com/composer/getcomposer.org/76a7060ccb93902cd7576b67264ad91c8a2700e2/web/installer -O - -q | php -- --quiet # mv composer.phar /usr/local/bin/composer |
Perl スクリプトにも対応させる
Perl による CGI スクリプトを動かす必要もあったので、対応させていきます。
FCGI のインストール
まずは FCGI をインストールします。
1 2 3 4 5 6 7 8 9 | # dnf install perl-FCGI サブスクリプション管理リポジトリーを更新しています。 メタデータの期限切れの最終確認: 2:24:53 前の 2023年11月08日 08時27分10秒 に実施しました。 依存関係が解決しました。 ============================================================================================================================================================================================================================================================================================================================= パッケージ アーキテクチャー バージョン リポジトリー サイズ ============================================================================================================================================================================================================================================================================================================================= インストール: 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/ にテスト用のスクリプトを作成します。
1 2 3 | #!/usr/bin/perl print "Content-type: text/html\n\n"; print `perl -v`; |
パーミッションを 755 に変更します。
1 | # chmod 755 /var/www/vhosts/XXXXX/cgi-bin/test.cgi |
ブラウザからアクセスして、表示できるか確認してください。
表示が確認出来たら、test.cgi は削除しておきましょう。
まとめ
管理画面からほとんどすべての操作ができるのはとても便利だと感じました。
最初はどこを操作したら良いか戸惑う部分もありましたが、慣れれば何とかなりそうですね。
以上で基本的な OpenLiteSpeed の設定は完了です。
次回はデータベースサーバーを構築します。
コメント