Nginx + FastCgi + Spawn-fcgi + c 的架構嘗試

Nginx + FastCgi + Spawn-fcgi + c 的架構嘗試

Php寫的很有段時間了,最近看公司一些關鍵的後端CGI都是用C寫的,以lighthttp 最爲server 。忽然也有種學習用C寫CGI的想法。雖然php結合php-fpm的fastcgi模式也有不錯的性能,反正多學一種東西又有和不可以呢?何況,某些情況下C的性能還是php無法比擬的。

先有必要有這樣第一個認識:ngxin作爲一個webserver,本身並不包含CGI的解釋器,需要通過一箇中間件【例如php-fpm】來運行CGI。他們之間的模式大致是:

nginx <-- socket --> php-fpm-------->php

那麼nginx既然要運行c寫的CGI那麼也應該有類似php-fpm的東西。baidu, google了下,發現有一個spawn-fcgi的東西。原本是lighttp 內的fastcgi進程管理器。 於是又搜索了下,折騰了一個下午,終於拋出了經典的hello world !!! 。下面是具體步驟:

大致分爲5步:

1、安裝Spawn-fcgi 【啓動cgi的時候需要】

wget http://www.lighttpd.net/download/lighttpd-1.4.19.tar.gz

tar zxvf lighttpd-1.4.19.tar.gz

cd lighttpd-1.4.19

./configure

make

複製 編譯好的spawn-fcgi到 nginx目錄,很主要!!!!

cp ./src/spawn-fcgi /usr/local/nginx/sbin/

2、安裝fastcgi庫:: 【提供編寫cgi時的類庫】

wget http://www.fastcgi.com/dist/fcgi.tar.gz

tar zxvf fcgi.tar.gz

cd fcgi

./configure

make

make install

3、測試代碼::

#include

int main( int argc, char *argv[] )

{

while( FCGI_Accept() >= 0 )

{

FCGI_printf( “Status: 200 OK\r\n” );

FCGI_printf( “Content-Type: text/html\r\n\r\n” );

FCGI_printf( “Hello world in C\n” );

}

return 0;

}

編譯::

g++ -o test.cgi test.cpp -L /usr/local/lib/ -lfcgi

4、啓動Spawn-fcgi::

spawn-fcgi -a 127.0.0.1 -p 7000 -u www -f /data/cgi-bin/test.cgi

如果報:error while loading shared libraries: libfcgi.so.0: cannot open shared object file: No such file or directory

請執行如下命令:爲了這個錯誤,折騰了很長時間哦!

cp /usr/local/lib/libfcgi.so.0 /usr/lib

5、配置nginx.conf

location ~ .cgi$

{

fastcgi_pass 127.0.0.1:7000;

fastcgi_index index.cgi;

fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;

include fastcgi_params;

}

重啓nginx

service nginx restart

我的系統是ubuntu server版。 具體要依情況而定。

收工!!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章