FastCGIによる高速化
スタンドアローン版は最も高速に動作します。
キャシュ環境による高速化
自前サーバ等で動作させる場合*1、FastCGIの設定を行うことで数倍以上のパフォーマンスの向上が見込めます。またシステム設定からページキャッシュ機能を有効にすることで更に高速化されます。
adiaryのバージョンアップ時、.pmファイル書き換え時等のモジュールのリロードは内部で自動的に行われます。Apache等の再起動は不要です。
FastCGI
Apache側にプロセス管理モジュールを入れるタイプのキャッシュ環境です。mod_fastcgiではなくmod_fcgidを推奨します。
apt-get install libapache2-mod-fcgid libfcgi-perl
Apacheでモジュールを有効にする必要があります。/etc/apache2 などの設定ディレクトリに移動します。
cd mods-enabled ln -s ../mods-available/fcgid.load ln -s ../mods-available/fcgid.conf vi fcgid.conf
confの設定詳細はApacheのマニュアルをみてください。いくつか注意点だけ触れておきます。
FastCGIはデフォルトで「フォームの最大送信サイズが128KB」「タイムアウトが40秒」などのかなり強い制限値に設定されています。この設定のままではインポート処理やアルバム機能で問題となりますので、必要に応じて緩和してください。
<IfModule mod_fcgid.c> # 128KB FcgidMaxRequestLen 131072 FcgidIOTimeout 40 </IfModule>
最後に、adiaryの実行ファイルを adiary.fcgi に変更してください。
FastCGI + mod_proxy_cgiにる設定
Nginxでの設定のように、あらかじめFastCGIデーモンとして起動しておくこともできます。
デーモン起動の方法はNginxでの設定を参照してもらうとして、ここではApache側の設定のみ解説します。Webサーバ上の /adiary/ に adiary をインストールしている場合、次のように設定を記述します。
# ./adiary.fcgi 127.0.0.1:9000 ProxyPass /adiary/adiary.fcgi "fcgi://localhost:9000/"
UNIX domain socket使用時は以下のように書きます。
# ./adiary.fcgi adiary.sock ProxyPass /adiary/adiary.fcgi "unix:/path/to/adiary.sock|fcgi://localhost"
.htaccess + mod_rewriteを使用する場合
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ fcgi://localhost:8888/path/to/$1 [P,L]
mod_rewriteと組み合わせる場合、UNIX domain socketは非対応のようです。
Ver3.40で廃止された方法
mod_perl2
Apache自体にperlを組み込む動作環境です。長らく最速の方法でしたが、より高速なhttpデーモンの開発により廃止されました。
SpeedyCGI
Perl自体をラップしてスクリプトを常駐させます。以前は推奨の方法でしたが、SpeedyCGIが長らくメンテナンスされておらず、Image::Magickの利用で不具合が起こるため廃止されました。
速度計測メモ
- Apache 2.4
- adiary Ver3.22 on Perl 5.24.1
- Nginx Ver1.10.3
- adiary Ver3.50-dev on Perl 5.28.1
- リクエスト/秒: ab -n 1000 -c 100 -l
- 平均応答速度: ab -n 100 -c 1 -l
- ページキャッシュoff(動的生成)
サーバ | 動作方法 | 平均応答速度 | Request/sec |
---|---|---|---|
Apache | CGI | 52.502 ms | 53 |
SpeedyCGI | 17.776 ms | 467 | |
FastCGI | 3.804 ms | 471 | |
mod_perl 2.0 | 4.586 ms | 762 | |
Nginx | FastCGI (TCP) | 2.581 ms | 902 |
FastCGI (UNIX dom) | 2.441 ms | 927 | |
adiary.httpd.pl | 3.473 ms | 1043 |