超高速Webサーバー「LiteSpeed」仮想ホストの設定

2024/11/15に公開

超高速Webサーバー「LiteSpeed」とは?

https://zenn.dev/tomoakinagahara/articles/7c31d6d1fc828a

仮想ホストとは?

一つのサーバー(一つのIPアドレス)に複数のドメインを割り当てる機能である。
例えば、example.com と example.net と example.org の3つのサイトを一つのサーバー上(1つのIPアドレス)で運用することが可能になる。

仮想ホストの設定方法

仮想ホストを設定すると、1つのサーバー上で(1つのIPアドレスで)複数のサイト(ドメイン)が運用できる。この記事では、ドメイン名が example.com の設定をする。

変数のパス

  • $SERVER_ROOT/usr/local/lsws
  • $VH_ROOT/usr/local/lsws/(仮想ホスト名) 仮想ホスト名はドメイン名と一緒にした方が迷わないはず(この記事の場合は、example.com)
  • $VH_DOMAIN:にはドメイン名(この記事の場合は、example.com)が代入されるらしい

ディレクトリーの作成

  1. sudo mkdir -p /usr/local/lsws/vhosts/example.com/html ドキュメントルート
  2. sudo mkdir -p /usr/local/lsws/vhosts/example.com/logs ログの保存ディレクトリー
  3. sudo mkdir -p /usr/local/lsws/conf/vhosts 仮想ホストの設定ファイルを保存するディレクトリー
  4. sudo chown lsadm /usr/local/lsws/conf/vhosts 所有者の変更

コンテンツの作成

  1. /usr/local/lsws/vhosts/example.com/html/index.htmlを作成し、何か文字を書いておく

仮想ホストの作成

パスは、/usr/local/lsws/が省略されたパスを書く。フルパスでも可能。

  1. 管理画面のVirtual Hostsを開く
  2. Virtual Host List の ➕️ ボタンを押す
  3. Virtual Host Nameexample.com
  4. Virtual Host Rootvhosts/example.com/
  5. Config Fileconf/vhosts/example.com.conf
  6. シンボリックリンクを許可するは、所有者と一致する場合がベター
  7. スクリプト/外部アプリを有効にするは、はいを選択しないとPHPが使えない
  8. 抑制されたは、はいにすると安全
  9. その他の設定は任意で
  10. 💾のボタンを押して保存
  11. ディレクトリーは自分で作成する必要がある。パーミッションに注意。オーナーを変更するのがよい。ファイルはcreateボタンで作成して貰える

この管理画面で設定した内容は、/usr/local/lsws/conf/httpd_config.confに反映される。

仮想ホストの設定をする

上記で作成した仮想ホストの設定を行う

  1. 左メニューからバーチャルホストをクリック
  2. バーチャルホスト名の一覧が表示されるので、example.comをクリック
  3. 一般タブをクリック
  4. Document Root/usr/local/lsws/vhosts/example.com/html/に変更

作成した仮想ホストをポートに紐づける

LiteSpeed内部では、次のように仮想ホスト内のコンテンツを出力する

  1. アクセスされたポートに紐づく仮想ホストの一覧を参照する
  2. 仮想ホストの一覧の中から、ドメイン名に一致した仮想ホストのドキュメントルートを参照する
  3. URLに従って、ドキュメントルート下のパスのファイルをクライアントに送信する

次の手順でポートに仮想ホストを紐づける

  1. 左メニューから「リスナー」を選択
  2. 利用したいポートを選択。なければ作成する
  3. ポートに仮想ホストを紐づける(マッピング)。「バーチャルホストマップ」の➕️をクリック
  4. 「バーチャルホスト」からlocalhostをプルダウンで選択
  5. 「ドメイン」にサーバーのドメイン名かIPアドレスを入力する。?をクリックすると、役に立つヒントが表示される
    1. ここに設定するドメイン名には、ワイルドカードが使える。例えば、*.example.comや、example.*が使える。
    2. ヘルプには、カンマ,区切りで複数のドメインを指定できるとあるが、なぜか全く異なるドメインだと動作しない。
  6. 💾をクリックして保存
  7. LiteSpeedを再起動
  8. 上記で設定した「ドメイン(もしくはIPアドレス)」の「ポート」にアクセスする:localhost:8088 or 192.168.0.1:8088

SSL by Let's Encrypt

Let's Encryptで動作可能。
ハマりポイントは、【リスナー】側のSSLの設定を行わないとエラーになる。仮想ホスト側の設定で証明書を指定すれば、そちらが仮想ホストで利用されるようになる。

  1. 左メニューから【リスナー】をクリック
  2. ➕️ボタンを押して、次のように設定する
    1. リスナー名:SSL
    2. ポート:443
    3. セキュア:はい
  3. 【SSL】タブをクリックして、次のように設定する
    1. 秘密鍵ファイル:/etc/letsencrypt/live/(ドメイン名)/privkey.pem
    2. 証明書ファイル:/etc/letsencrypt/live/(ドメイン名)/cert.pem
    3. 証明書チェーン:いいえ
    4. 証明書ファイル:/etc/letsencrypt/live/(ドメイン名)/chain.pem
  4. このリスナーに紐づけるバーチャルホストを追加する
  5. バーチャルホストの【SSL】も設定すると、リスナー側のSSLの設定(証明書)より優先される

公式の解説

https://www.litespeedtech.com/support/wiki/doku.php/litespeed_wiki:config:letsencrypt-ssl

.htaccess

Apacheの.htaccessとは完全互換ではない。複雑なルールは使えないと思ってよい。
<IfModule><Files>などのタグ記法は総じて使えない。
使えない記法があると、そこだけが無視されるのか、.htaccess全体のルールが無視されるのか、よく分からない。

Rewriteについて

mod_rewriteRewriteルールは、簡単なものなら問題ない。ちょっとでも凝った使い方をすると、途端に工夫が必要になる。

RewriteBaseが使えない

RewriteBaseは使えないので、ドキュメントルートからのパスを全て記述する必要がある。

ルールが増えると複雑になる

RewriteBaseが使えないので、ルールは常に全体一致となる。このディレクトリー以下だけこうしたいという書き方が、ルールが増える毎に思いがけない不具合を起こしやすい。

実行ユーザーについて

左メニューのバーチャルホストから → 「バーチャルホスト名」 → 「基本」タブ → 「セキュリティ」セクション → 「外部アプリのUIDモードの設定」を「DocRoot UID」に変更すると、ドキュメントルートのUIDが実行ユーザーになるようだ。

注意点は、上記の設定を行うと、PHPのセッションファイルもドキュメントルートのUIDで保存されてしまう。

LiteSpeedのデフォルトのユーザーとグループは、nobodynogroupになるが、これはこれで良いかもしれない。ApacheNginxuidgidnobodynogroupにしてしまえば、Webサーバー全体のユーザーとグループが統一できる。基本的にほぼ全てのディストリビューションはnobodynogroupuidgid65534にしている。

Discussion