2010年12月15日水曜日

lighttpd + fastcgi(C/C++)設定

WEBサーバ経由で組み込みボードの汎用ポートを制御したりするには、スクリプト言語に移植されていない
ライブラリを使用するので、C/C++でコンパイルした実行ファイルをfastcgi経由で実行させなくていけない。

やりたいイメージ:
 (ユーザ、WEBブラウザ)→ LAN経由 → WEBサーバ(fastcgi経由 → 目的の制御プログラム)

処理の流れ:
1.ユーザがLAN経由でアクセスしてきて、WEBサーバにWEBAPI(URL、リクエスト)が届く。
2.WEBサーバは、起動しているfcgiモジュールにリクエストを投げてレスポンスをもらう。
3.WEBサーバは、ユーザへレスポンスを返し、結果をWEBブラウザに表示する。

こういった内容をnginxでできるか調べてみたら、fastcgiのプロセス管理は自前でやる事になる。
そこで別の軽量WEBサーバ「lighttpd」を使う事にした。


1.インストール
・lighttpdサーバインストール。
apt-get install lighttpd

・C/C++用fcgiライブラリをインストール。(ついでにテスト用fcgiもコンパイル)
$ wget http://www.fastcgi.com/dist/fcgi.tar.gz
$ tar zxvf fcgi.tar.gz
$ cd fcgi
$ make
$ sudo make install
$ cd example
$ gcc -o index.fcgi echo.c -lfcgi
$ mkdir /var/www/fcgi/
$ mv index.fcgi /var/www/fcgi/


・初期設定のままで
http://127.0.0.1/
へアクセスしてみてサーバが正常に動いているか確認する。


2.設定
fastcgiが動くように設定をする。
$ lighty-enale-mod fastcgi

公式ドキュメントより、Fastcgi.serverの設定方法はこんな感じにする。
lighttpd.confで
ドキュメントルート:/var/www/fcgi/
に設定してから
conf-enabled/10-fastcgi.confを開き、
---
…
fastcgi.server = (
        ".fcgi" => (
                "localhost" => (
                        "socket" => "/tmp/fcgi.socket",
                        "bin-path" => "/var/www/fcgi/index.fcgi",
                        "idle-timeout" => 20,
                        "check-local" => "disable",
                        "min-procs" => 1,
                        "max-procs" => 1
                )
        )
)
---

fastcgiモジュールのプロセスを起動して、サーバー再起動。
$ sudo spawn-fcgi -f /var/www/fcgi/index.fcgi -s /tmp/index.fcgi 2>&1 > /dev/null
$ sudo /etc/init.d/lighttpd farce-reload
(追記)
lighttpdが起動してくれるのでサーバ再起動のみでOK。
それの確認方法は、自分で生成されたプロセスIDをKillしても
別のプロセスIDで再起動しているのがわかる。
$ ps aux | grep index.fcgi
$ kill -9 (プロセスID)
$ ps aux | grep index.fcgi


3.動作確認
http://127.0.0.1/fcgi/
へアクセスしてみてfastcgiが動作しているかチェックする。

参考URL
http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs%3AModFastCGI
http://linux.mini13i.gotdns.org/?Lighttpd%2FFastCGI
コメントを投稿

Androider