FastCGIによる高速化

スタンドアローン版は最も高速に動作します。

キャシュ環境による高速化

自前サーバ等で動作させる場合*1、FastCGIの設定を行うことで数倍以上のパフォーマンスの向上が見込めます。またシステム設定からページキャッシュ機能を有効にすることで更に高速化されます。

adiaryのバージョンアップ時、.pmファイル書き換え時等のモジュールのリロードは内部で自動的に行われます。Apache等の再起動は不要です。

*1 : レンタルサーバ等では通常は設定不可

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
ApacheCGI52.502 ms 53
SpeedyCGI17.776 ms 467
FastCGI3.804 ms 471
mod_perl 2.04.586 ms 762
NginxFastCGI (TCP)2.581 ms 902
FastCGI (UNIX dom)2.441 ms 927
adiary.httpd.pl3.473 ms1043