最近地道にトラフィックが増えてきているので、そろそろWORDPRESSの高速化を検討してみる。世間ではNginxがはやっているようだが、ここは敢えてApatch Traffic Serverを使ってみたい。
OSはUbuntu 15.xを使用しています。
Apatche Traffic Serverの初期設定
apt-getを使用して標準のレポジトリからApatche Traffic Serverをインストールします。
sudo apt-get install trafficserver
Reverse-Proxeの接続先を設定します。
sudo nano remap.config map http://www.example.net:8080/ http://127.0.0.1/ reverse_map http://127.0.0.1/ http://www.example.net:8080/
サービスを起動してポート8080に接続してみますが、動作しません。
sudo service trafficserver start
ログファイルを閲覧すると、以下のようなエラーが発生しています。
less /var/log/trafficserver/traffic.out traffic_server: using root directory '/usr' FATAL: Trafficserver has not been designed to serve pages while running as root. There are known race conditions that will allow any local user to read any file on the system. If you still desire to serve pages as root then add -DBIG_SECURITY_HOLE to the CFLAGS env variable and then rebuild the server. It is strongly suggested that you instead modify the proxy.config.admin.user_id directive in your records.config file to list a non-root user.
どうやら標準のままだとrootアカウントで起動されてしまうけど、trafficserverはrootアカウントで起動できないため権限周りでエラーとなっているようです。/etc/trafficserver/records.configを編集してproxy.config.admin.user_idの設定を追加するように指示されているので追加します。trafficserverアカウントは既に作られているので、追加の必要は無いようです。
sudo nano /etc/trafficserver/records.config CONFIG proxy.config.admin.user_id STRING trafficserver
サービスを再起動してポート8080に接続してみると、今度は動作しました。
sudo service trafficserver restart
サービスの移行
正常に動作するようなので、本番に移行します。
Windows Azureを使っているので、エンドポイントの設定を変更してポート80への接続を、ポート8080に振り分けるようにします。こういう所、手抜きできるからクラウド好きです。
remap.configの設定を本番用に変更します。先ほどはポート8080の記載がありましたが、それを削除します。
sudo nano remap.config map http://www.example.net/ http://127.0.0.1/ reverse_map http://127.0.0.1/ http://www.example.net/
このままだとWORDPRESSが正常に動作しないので、以下の設定をwp-config.phpに追記します。
sudo nano /var/www/wordpress/wp-config.php $_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST']; $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
apatch2とtrafficserverを再起動します。
sudo nano /var/www/wordpress/wp-config.php $_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST']; $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
ポート80に繋いでみますが、正常に動作しているようです。
ローカルストレージへのキャッシュ移動
標準設定のままだと/var/cash/trafficserverにキャッシュデータを保存します。クラウド上の仮想サーバーは一般的にIO速度が遅いため、あまり速度が改善しません。その代わりにWindows Azureでは高速な揮発性のローカルストレージも提供されています。揮発性のストレージは仮想サーバをシャットダウンすると失われますが、キャッシュデータなら失われても問題ないのでこちらに移動します。
ローカルストレージはスワップファイル用に/mntにマウントされているので、/mnt/trafficserverと言うフォルダを新たに用意してこちらを使います。
新たにフォルダを作成します
sudo mkdir /mnt/trafficserver
sudo chown trafficserver /mnt/trafficserver
storage.configを編集して、キャッシュの保存先を変更します。
sudo nano /etc/trafficserver/storage.config
/mnt/trafficserver 256M
trafficserverを再起動します。
sudo service trafficserver restart
どの程度改善されたか
トップページの表示完了まで5,000msかかっていたのが700ms程度に。トップページのhtmlだけなら2,500ms程度かかっていたのが、20ms程度にまで高速化されました。応答速度が125倍改善して、体感的にも7倍くらい速くなっている計算。
参考
WordPressをリバースプロクシ対応にする3つのポイント
How to Set Up Apache Traffic Server as a Reverse-Proxy on Ubuntu 14.04