lighttpd開発2日目
昨日まで色々lighttpdのモジュール開発について調べてましたけど、自分のやりたい事は「特定のURIリクエストに対して、対応レスポンスデータを返す」という単純なCGIプログラムなので、FastCGIで開発するほうが合ってる気がしてきた。
他にもFastCGIのメリットは色々あるらしく、
- FastCGIならlighttpdだけでなくApacheでも使える
- FastCGIならC以外にもC++/Perl/Javaといった言語が使える
- FastCGI(+lighttpd)ならApache+mod_perlよりも幾分速い?
なのでここからの開発はFastCGIで開発することにします。
(折角調べたlighttpdモジュールの作り方が無駄に)
開発ライブラリなどのインストール
sudo apt-get install libfcgi-dev lighttpd
FastCGIプログラム
一番簡単と思われるリクエストURIをそのまま返すようなCGIを作ってみます
プログラムの中身
#include "fcgi_config.h" #include "fcgi_stdio.h" #includeextern char **environ; int main (int argc, char *argv[]) { int count = 0; while (FCGI_Accept() >= 0) { printf("Content-type: text/html\r\n\r\n"); printf("%s\r\n", getenv("REQUEST_URI")); } return 0; }
g++ -o test.fcgi test.cpp -lfcgi
サーバ(lighttpd)の設定(mod_fastcgiの有効化)
FastCGIプログラムを実行するには、
の2つがあるらしい。両方やってみましたが1番目の方が
sudo /etc/init.d/lighttpd restart
とコマンド1発で修正プログラムを起動できるので楽かな?
2番目の方法は参考リンク先をみて試してみてください
vi /etc/lighttpd/lighttpd.conf #モジュールの追加 server.modules = ( "mod_fastcgi", ←これを追加 #mod_fastcgiの設定 fastcgi.server = ( "/test.fcgi" => ( ←ここにアクセスしたときにCGI動作 ( "socket" => "/tmp/test.fcgi.2", ←CGIと通信するUNIXドメインソケット "bin-path" => "/home/user/test.fcgi", ←実際のfastcgiプログラム "check-local" => "disable", "min-procs" => 1, ←試験中なのでプロセスは1で固定 "max-procs" => 1, "max-load-per-proc" => 50, "idle-timeout" => 360 ) ) )
サーバ(FastCGI)の起動
sudo /etc/init.d/lighttpd restart
これでhttp://localhost/test.fcgiとかにアクセスすれば動作するはず
調べたい項目
200 OK以外のステータスの返し方とか