tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

【apache】mod_fastcgiをインストールして使ってみるメモ

はじめに

下記サイトを見ていてmod_fastcgiが気になったので入れてみたメモ。
【Munin】mod_fcgidからmod_fastcgiに切り替え、負荷軽減

貧弱な環境では、mod_fastcgi を使う事で、比較的メモリに余裕が増えましたと書かれていたのを見てどれどれ自分も、って感じですね。

アジェンダ

  1. ダウンロード&インストール
  2. apacheのconfigに設定
  3. sample.fcgiを作る
  4. apache再起動して確認してみる

apacheなんかはyumでinstallしてある前提です。

1. ダウンロード&インストール

下記サイトから環境にあったダウンロードリンクをコピーします。
http://pkgs.repoforge.org/mod_fastcgi/

自分はmod_fastcgi-2.4.6-2.el6.rf.x86_64.rpmのリンクを選びました。

※ ダウンロード
$ cd /usr/local/src
$ sudo wget http://pkgs.repoforge.org/mod_fastcgi/mod_fastcgi-2.4.6-2.el6.rf.x86_64.rpm

※ インストール
$ rpm -ivh mod_fastcgi-2.4.6-2.el6.rf.x86_64.rpm

※ どこに入ったか確認
$ locate mod_fastcgi.so
/usr/lib64/httpd/modules/mod_fastcgi.so
/usr/local/apache2/modules/mod_fastcgi.so

2. apacheのconfigに設定

fastcgi.confは無かったので新規で作りました。 設定した中身はこの3行だけ

$ vi /etc/httpd/conf.d/fastcgi.conf
---- vi ----
LoadModule fastcgi_module     /usr/lib64/httpd/modules/mod_fastcgi.so
ScriptAlias /fcgi/ /var/www/fcgi/
FastCgiServer /var/www/fcgi/sample.fcgi     -processes 3
------------
軽く解説

LoadModule fastcgi_module /usr/lib64/httpd/modules/mod_fastcgi.so

fastcgi_moduleをインストールしたのでLoadModuleした上でlocateで調べたパスを指定してます。

ScriptAlias /fcgi/ /var/www/fcgi/

/var/www/fcgiはこれから作成するのでまだありません。
このあとてきとうなcgiを作ってスクリプトを置く場所ですね。
ScriptAliasを設定することでhttp://ゆーあーるえる/fcgi/でアクセスされた際に/var/www/fcgi/を見るようにしてます

FastCgiServer /var/www/fcgi/sample.fcgi -processes 3

これから作るsampleのfcgiを指定してます。
-processes 3によりプロセスが3つ起動される予定。

必要に応じて-processes 5とかにするなりすると良いですね。

3. sample.fcgiを作る

動きを見るためだけのsample.fcgiを作ります。
プログラムはCPANサイトのFCGIモジュールのサンプルをまんまコピりました。
http://search.cpan.org/~skimo/FCGI-0.67/FCGI.PL

※ fcgi用のディレクトリもないので作る
$ sudo mkdir /var/www/fcgi

※ fcgiスクリプトをつくる
$ sudo vi /var/www/fcgi/sample.fcgi
---- vi作成 ----
#!/usr/bin/perl
use FCGI;
my $count = 0;
my $request = FCGI::Request();
while($request->Accept() >= 0) {
  print("Content-type: text/html\r\n\r\n", ++$count);
}
---------------

4. apache再起動して確認してみる

用意はできたのでapacheを再起動してみてみます

$ sudo sudo /etc/init.d/httpd restart
httpd を停止中:                                            [  OK  ]
httpd を起動中: Syntax error on line 3 of /etc/httpd/conf.d/fastcgi.conf:
FastCgiServer: "/var/www/fcgi/sample.fcgi" access for server (uid 4294967295, gid 4294967295) not allowed: execute not allowed
                                                           [失敗]

※ アクセス権がなくて怒られてるので
※ fcgiのアクセス権を変えてから再実行でうまくいった
$ sudo chmod 755 /var/www/fcgi/sample.fcgi 
$ sudo sudo /etc/init.d/httpd restart
httpd を停止中:                                            [失敗]
httpd を起動中:                                            [  OK  ]
プロセスを見てみる

こんな感じで子プロセスとしてsample.fcgiが立ち上がってます

$ ps auxf | grep fcgi
apache    2277  0.0  0.1 179956  2532 ?        S    21:08   0:00  \_ /usr/sbin/fcgi-
apache    2284  0.0  0.1  27904  2092 ?        S    21:08   0:00  |   \_ /usr/bin/perl /var/www/fcgi/sample.fcgi
apache    2287  0.0  0.1  27904  2092 ?        S    21:08   0:00  |   \_ /usr/bin/perl /var/www/fcgi/sample.fcgi
apache    2288  0.0  0.1  27904  2092 ?        S    21:08   0:00  |   \_ /usr/bin/perl /var/www/fcgi/sample.fcgi
urlでアクセスしてみる

レンタルサーバやらドメインの設定にもよるかもですが、
http://ゆーあーるえる/fcgi/sample.fcgiでアクセスしてみます。

1とだけ表示されます。
今回のプログラムは1プロセスごとに数値を1からカウントするものなので、
最大3回アクセスすると1増えて2になる感じで動きが確認できました。

参考

下記サイトを参考にしました * FastCGI with mod_fastcgi * 【Munin】mod_fcgidからmod_fastcgiに切り替え、負荷軽減

おわり

入れて満足してしまってメモリがどうなったかとかは見てません。
mod_fcgidmod_fastcgiは別物って自分も知らなかったので勉強になって良かったということでw