OpenLiteSpeedの導入からWordPress動作まで
株式会社ネットアシスト 技術部のykinjoです。Webサーバソフトウェアとして名前を見かける事が増えてきているLiteSpeed Web Server(LSWS)、Nginxよりも高速かつ、ApacheのURLリライト設定が(Nginxとは違い)そのまま動く、と良さそうな内容が謳われており、最近シェアも増えてきている(下記記事より)らしいWebサーバです。今回はGPLv3ライセンス版である、OpenLiteSpeedについて、実際の導入から、WordPressが動作するところまでを確認してみたいと思います。
LiteSpeedが大躍進 – 11月Webサーバシェア [2016/11/24] マイナビニュース
http://news.mynavi.jp/news/2016/11/24/190/
公式
LiteSpeed Technologies Inc
https://www.litespeedtech.com/
OpenLiteSpeed
http://open.litespeedtech.com/mediawiki/
当投稿執筆時点での安定版は2016年8月29日リリースの1.4.23です。
OpenLiteSpeedの特徴
以下のような特徴が謳われています(OpenLiteSpeedサイトより引用)。
-Event-driven architecture with extremely low resource (CPU and RAM) overhead.
-Handles hundreds of thousands of concurrent connections without load spikes.
-WebAdmin GUI with real-time statistics.
-Rewrite engine uses Apache mod_rewrite syntax.
-Worker processes for scalability. Ability to bind certain processes to particular workers.
-High-performance coding using kqueue (FreeBSD and OS X), epoll (Linux), /dev/poll (Solaris), and poll.
-High-performance page caching.
-Support of third-party modules through API (LSIAPI).
対応するOSは以下になります。
- CentOS 5, 6 and 7
- Ubuntu 8.04 and up
- Debian 4 and up
- Solaris(x86): Sun0S 5.8 and up
- OS X 10.3 and up
- FreeBSD 4.5 and up
サイトの記載によると.htaccessファイルの互換性、mod_securityの互換性等は有償版でのみ提供される機能のようです。
環境
AWSに以下のようにAmazon EC2インスタンスを作成しました。CentOS 7は導入後にyum updateでパッケージの最新化を行い、epelレポジトリの有効化、MariaDB 5.5の導入(WordPress動作用・CentOS7公式レポジトリの物)、SELinuxの無効化等を行っています。
- AMI: CentOS Linux 7 x86_64 HVM EBS 1602-b7ee8a69-ee97-4a49-9e68-afaee216db2e-ami-d7e1d2bd.3 (ami-eec1c380)
- インスタンスタイプ: m4.large
※2 vCPU RAM8GB Network:中 - ストレージ: gp2(汎用SSD) 100GB
※ベースラインパフォーマンス300IOPS/バースト時3000IOPS - EBSスループット最適化: なし
- ElasticIP付与
導入
今回はCentOS 7を利用するため、レポジトリを登録しyumを利用してOpenLiteSpeedをインストールします。
Help:Repositories
http://open.litespeedtech.com/mediawiki/index.php/Help:Repositories
公式のレポジトリ(CentOS7向け)を追加。OpenLiteSpeedと、OpenLiteSpeed用のPHP7.0を導入します。
rpm -ivh http://rpms.litespeedtech.com/centos/litespeed-repo-1.1-1.el7.noarch.rpm yum install openlitespeed yum install lsphp70 lsphp70-common lsphp70-mysqlnd lsphp70-gd lsphp70-process lsphp70-mbstring lsphp70-xml lsphp70-pdo lsphp70-opcacheLiteSpeed Web Server(以下: LSWS)を起動します。
systemctl start lsws起動するまでであればこれで完了です。デフォルトで生成されるバーチャルホストはTCP8088で、LSWS管理画面がTCP7080でアクセス可能となります。
管理画面
https://[IPアドレス]:7080/login.php
初期設定の状態は admin 123456 でログイン可。検証でない場合は必ず変更しておきましょう。
管理画面ではパフォーマンスの状態確認やバーチャルホストの設定等が行えます。初期設定のバーチャルホスト http://[IPアドレス]:8088/
PHPの動作設定とWordPress導入
このままでもデフォルトで存在するバーチャルホストでPHPは動作するのですが、先ほどLSWS用に導入したPHP7.0ではなく、PHP 5.6が動作していました。phpinfoを実行するファイル等を置いてみると分かりますが、mysqlnd拡張なども有効ではなく、このままではWordPressが動作しませんので、先ほど導入したPHP 7.0で動作するように初期設定を行います。このあたりはPHPがモジュールとして動作するApacheではなく、php-fpmで動作するNginxに近いように感じます。
バーチャルホストの追加
LSWS管理画面からVirtual Hostsの画面に移動、デフォルトの「Example」とは別に、新しくバーチャルホストを作成します。
Virtual Host Name: WordPressTest
Virtual Host Root: $SERVER_ROOT/WordPressTest/
Config File: $SERVER_ROOT/conf/vhosts/WordPressTest/vhconf.conf
Document Root: $VH_ROOT/wordpressEnable Scripts/ExtApps: Yes
Restrained: No保存後、設定ファイルがない旨メッセージ(Configuration has been modified. To apply changes, please perform a graceful restart.)が表示されるので「Clik to Create」をクリックし作成。更に、画面右上の緑色の再起動ボタンを押し、LSWSを再起動します。
「Are you sure you want to restart LiteSpeed?」→「Yes」再度バーチャルホストの設定を開き以下も設定しておきます。設定後はLSWSを再起動します。
「General」
Index Files: index.php「Rewrite」
Enable Rewrite: Yes
Rewrite Rules:RewriteBase /
RewriteRule ^/index\.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]URLリライトルールの書き方はApacheと同じ形式のようです。
リスナーの設定
次に「Listener」の設定に移動します。デフォルトのリスナー「Default」のマッピング先をバーチャルホスト「Example」から「WordPressTest」に変更して保存します。先ほどと同じようにLSWSの再起動を求められるので、画面右上の再起動ボタンで再起動してください。
PHPの実行設定とドキュメントルート作成
yumで導入したLSWS用のphp 7.0は以下のディレクトリに配置されています。
/usr/local/lsws/lsphp70/bin/lsphp
これが読み込まれるように
/usr/local/lsws/fcgi-bin/lsphp5
のリンク先を変更します。ln -sf /usr/local/lsws/lsphp70/bin/lsphp /usr/local/lsws/fcgi-bin/lsphp5※どう見ても力技ですが、open.litespeedtech.com/mediawikiに記載されている手順となります。「Server Configuration」内の「External App」でPHP7.0の読み込むようにするのが本来の設定かと思われ、適切に設定を行う事で、バーチャルホストごとにPHPのバージョンを変更するといった事も可能になるようで、設定改善の余地がありますが、今回の目的はLSWS上のWordPress動作であるため割愛します。
次に、ドキュメントルートディレクトリの作成とWordPressの配置を行います。
cd /usr/local/lsws/ ls add-ons autoupdate bin conf Example gdata lib lsphp70 php share VERSION admin backup cachedata docs fcgi-bin GPL.txt logs modules phpbuild tmp mkdir WordPressTest cd WordPressTest/ wget https://ja.wordpress.org/wordpress-4.6.1-ja.zip unzip wordpress-4.6.1-ja.zip chown nobody wordpressここまでの設定を反映させてLSWSの再起動を行います。ここまででLSWS側の設定は完了です。
WordPressの初期設定
あとはMariaDBにログインしWordPress用のデータベースをcreate databaseで作成。Webブラウザで
http://[サーバIP]:8088
にアクセスし、WordPressのインストール処理を完了させてください。ここまででWordPressが動作するようになりました。
最後に、このWordPressが安定して動作するかをJMeterを利用したベンチマークで確認してみます。
JMeterスレッド数: 2000
JMeterループ回数: 1
JMeterアクセスページ: WordPress TOPページ
JMeter実行マシン: 手元のノートPC
WordPressバージョン: 4.6.1-ja
WordPress側の設定: テーマを「Twenty Twelve」に変更。それ以外は初期状態。JMeter実行側のマシンスペック、回線速度が本格的なベンチマークを行うには不足しているかと思いますが、それでもLSWS、PHP、MariaDB、WordPressのいずれも未チューニングの状態で、秒間44.5リクエストの速度でHTTP5xxエラー無く2000リクエストが処理できることを確認しました。
まとめ
今回は行わなかったログ周りの設定、チューニングやトラブルシュートのノウハウ等、実際に運用するためにはまだまだ調査するべき事が有りますが、当初の想定よりも導入・設定の負担は軽いように感じられます。http/2といった新しい仕様にもデフォルトで対応しているため、今後は状況に応じて利用されるケースは増えていくかもしれません。