Netassist Blog

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-opcache

LiteSpeed Web Server(以下: LSWS)を起動します。

systemctl start lsws

起動するまでであればこれで完了です。デフォルトで生成されるバーチャルホストはTCP8088で、LSWS管理画面がTCP7080でアクセス可能となります。

管理画面
https://[IPアドレス]:7080/login.php

LSWS 管理画面 LSWS ダッシュボード
初期設定の状態は admin 123456 でログイン可。検証でない場合は必ず変更しておきましょう。
管理画面ではパフォーマンスの状態確認やバーチャルホストの設定等が行えます。

初期設定のバーチャルホスト http://[IPアドレス]:8088/

LSWS サンプルページ

PHPの動作設定とWordPress導入

このままでもデフォルトで存在するバーチャルホストでPHPは動作するのですが、先ほどLSWS用に導入したPHP7.0ではなく、PHP 5.6が動作していました。phpinfoを実行するファイル等を置いてみると分かりますが、mysqlnd拡張なども有効ではなく、このままではWordPressが動作しませんので、先ほど導入したPHP 7.0で動作するように初期設定を行います。このあたりはPHPがモジュールとして動作するApacheではなく、php-fpmで動作するNginxに近いように感じます。

バーチャルホストの追加

LSWS管理画面からVirtual Hostsの画面に移動、デフォルトの「Example」とは別に、新しくバーチャルホストを作成します。

lsws_vhost lsws_vhost_docroot

Virtual Host Name: WordPressTest
Virtual Host Root: $SERVER_ROOT/WordPressTest/
Config File: $SERVER_ROOT/conf/vhosts/WordPressTest/vhconf.conf
Document Root: $VH_ROOT/wordpress

Enable 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」

restart_lsws

再度バーチャルホストの設定を開き以下も設定しておきます。設定後は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の再起動を求められるので、画面右上の再起動ボタンで再起動してください。

lsws_listener

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のインストール処理を完了させてください。

wp_setup wp_complate

ここまででWordPressが動作するようになりました。

最後に、このWordPressが安定して動作するかをJMeterを利用したベンチマークで確認してみます。

JMeterスレッド数: 2000
JMeterループ回数: 1
JMeterアクセスページ: WordPress TOPページ
JMeter実行マシン: 手元のノートPC
WordPressバージョン: 4.6.1-ja
WordPress側の設定: テーマを「Twenty Twelve」に変更。それ以外は初期状態。

lsws_speed_graph lsws_wp_speed

JMeter実行側のマシンスペック、回線速度が本格的なベンチマークを行うには不足しているかと思いますが、それでもLSWS、PHP、MariaDB、WordPressのいずれも未チューニングの状態で、秒間44.5リクエストの速度でHTTP5xxエラー無く2000リクエストが処理できることを確認しました。

まとめ

今回は行わなかったログ周りの設定、チューニングやトラブルシュートのノウハウ等、実際に運用するためにはまだまだ調査するべき事が有りますが、当初の想定よりも導入・設定の負担は軽いように感じられます。http/2といった新しい仕様にもデフォルトで対応しているため、今後は状況に応じて利用されるケースは増えていくかもしれません。