超高速Webサーバー「LiteSpeed」仮想ホストの設定
超高速Webサーバー「LiteSpeed」とは?
仮想ホストとは?
一つのサーバー(一つの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)が代入されるらしい
ディレクトリーの作成
-
sudo mkdir -p /usr/local/lsws/vhosts/example.com/html
ドキュメントルート -
sudo mkdir -p /usr/local/lsws/vhosts/example.com/logs
ログの保存ディレクトリー -
sudo mkdir -p /usr/local/lsws/conf/vhosts
仮想ホストの設定ファイルを保存するディレクトリー -
sudo chown lsadm /usr/local/lsws/conf/vhosts
所有者の変更
コンテンツの作成
-
/usr/local/lsws/vhosts/example.com/html/index.html
を作成し、何か文字を書いておく
仮想ホストの作成
パスは、/usr/local/lsws/
が省略されたパスを書く。フルパスでも可能。
- 管理画面の
Virtual Hosts
を開く -
Virtual Host List
の ➕️ ボタンを押す -
Virtual Host Name
はexample.com
-
Virtual Host Root
はvhosts/example.com/
-
Config File
はconf/vhosts/example.com.conf
-
シンボリックリンクを許可する
は、所有者と一致する場合
がベター -
スクリプト/外部アプリを有効にする
は、はい
を選択しないとPHPが使えない -
抑制された
は、はい
にすると安全 - その他の設定は任意で
- 💾のボタンを押して保存
- ディレクトリーは自分で作成する必要がある。パーミッションに注意。オーナーを変更するのがよい。ファイルはcreateボタンで作成して貰える
この管理画面で設定した内容は、/usr/local/lsws/conf/httpd_config.conf
に反映される。
仮想ホストの設定をする
上記で作成した仮想ホストの設定を行う
- 左メニューから
バーチャルホスト
をクリック - バーチャルホスト名の一覧が表示されるので、
example.com
をクリック -
一般
タブをクリック -
Document Root
を/usr/local/lsws/vhosts/example.com/html/
に変更
作成した仮想ホストをポートに紐づける
LiteSpeed内部では、次のように仮想ホスト内のコンテンツを出力する
- アクセスされたポートに紐づく仮想ホストの一覧を参照する
- 仮想ホストの一覧の中から、ドメイン名に一致した仮想ホストのドキュメントルートを参照する
- URLに従って、ドキュメントルート下のパスのファイルをクライアントに送信する
次の手順でポートに仮想ホストを紐づける
- 左メニューから「リスナー」を選択
- 利用したいポートを選択。なければ作成する
- ポートに仮想ホストを紐づける(マッピング)。「バーチャルホストマップ」の➕️をクリック
- 「バーチャルホスト」から
example.com
をプルダウンで選択 - 「ドメイン」にサーバーのドメイン名かIPアドレスを入力する。?をクリックすると、役に立つヒントが表示される
- ここに設定するドメイン名には、ワイルドカードが使える。例えば、
*.example.com
や、example.*
が使える。 - ヘルプには、カンマ
,
区切りで複数のドメインを指定できるとあるが、なぜか全く異なるドメインだと動作しない。
- ここに設定するドメイン名には、ワイルドカードが使える。例えば、
- 💾をクリックして保存
- LiteSpeedを再起動
- 上記で設定した「ドメイン(もしくはIPアドレス)」の「ポート」にアクセスする:
example.com:8088
or192.168.0.1:8088
SSL by Let's Encrypt
Let's Encryptで動作可能。ハマりポイントは、【リスナー】側のSSLの設定を行わないとエラーになること(デフォルトの証明書を設定する)。仮想ホスト側の証明書の設定で、仮想ホストのドメインの証明書を指定すれば、それが優先されて、仮想ホストで利用される。
- 左メニューから【リスナー】をクリック
- ➕️ボタンを押して、次のように設定する
- リスナー名:SSL
- ポート:443
- セキュア:はい
- 【SSL】タブをクリックして、次のように設定する
- 秘密鍵ファイル:/etc/letsencrypt/live/(ドメイン名)/privkey.pem
- 証明書ファイル:/etc/letsencrypt/live/(ドメイン名)/cert.pem
- 証明書チェーン:いいえ
- 証明書ファイル:/etc/letsencrypt/live/(ドメイン名)/chain.pem
- このリスナーに紐づけるバーチャルホストを追加する
- バーチャルホストの【SSL】も設定すると、リスナー側のSSLの設定(証明書)より優先される
公式の解説
.htaccess
Apacheの.htaccessとは完全互換ではない。複雑なルールは使えないと思ってよい。
<IfModule>
や<Files>
などのタグ記法は総じて使えない。
使えない記法があると、そこだけが無視されるのか、.htaccess
全体のルールが無視されるのか、よく分からない。
Rewriteについて
mod_rewrite
のRewriteルールは、簡単なものなら問題ない。ちょっとでも凝った使い方をすると、途端に工夫が必要になる。
RewriteBaseが使えない
RewriteBase
は使えないので、ドキュメントルートからのパスを全て記述する必要がある。
ルールが増えると複雑になる
RewriteBase
が使えないので、ルールは常に全体一致となる。このディレクトリー以下だけこうしたいという書き方が、ルールが増える毎に思いがけない不具合を起こしやすい。
実行ユーザーについて
左メニューのバーチャルホストから → 「バーチャルホスト名」 → 「基本」タブ → 「セキュリティ」セクション → 「外部アプリのUIDモードの設定」を「DocRoot UID」に変更すると、ドキュメントルートのUIDが実行ユーザーになるようだ。
注意点は、上記の設定を行うと、PHPのセッションファイルもドキュメントルートのUIDで保存されてしまう。
LiteSpeedのデフォルトのユーザーとグループは、nobody
でnogroup
になるが、これはこれで良いかもしれない。Apache
やNginx
のuid
とgid
もnobody
とnogroup
にしてしまえば、Webサーバー全体のユーザーとグループが統一できる。基本的にほぼ全てのディストリビューションはnobody
とnogroup
のuid
とgid
を65534
にしている。
Discussion