1. 程式人生 > >Mac下基於c++和spawn-fcgi開發nginx後臺fastcgi應用程式

Mac下基於c++和spawn-fcgi開發nginx後臺fastcgi應用程式

1,目的

在做後臺開發的時候一直使用的語言就是go java js python。由於框架不多,很少有人嘗試採用c++進行web後臺開發。基於此,本文嘗試在mac平臺下采用c++開發nginx的fastcgi addon。

2,原理

nginx作為代理伺服器,在nginx.conf配置檔案的http塊下的server子塊中,新增一條新的location,將請求連線轉移到後臺程序中進行處理。

3,具體實施步驟

3.1 安裝nginx

brew search nginx
brew install nginx

nginx安裝之後的路徑如下:

/usr/local/Cellar/nginx/nginx-version/bin 存放的是nginx的可執行檔案
/usr/local/etc/nginx 存放的是nginx的配置檔案,其中nginx.conf就在這個路徑下

修改nginx.conf檔案後,需要重新載入配置檔案,命令為:

nginx -s reload
如果上述命令不行,可以重新啟動nginx,命令如下:
nginx -s stop
nginx

3.2 安裝fastcgi程序管理器spawn-fcgi。由於spawn-fcgi是作為lighttpd的一個分支發展出來的,所以要先安裝lighttpd

brew search lighttpd
brew install lighttpd
brew search spawn-fcgi
bres install spawn-fcgi

3.3 安裝fastcgi軟體開發套件fcgi

考慮到很多同學都不能翻牆,再加上csdn下載收金幣,現將下載地址放出:

連結:https://pan.baidu.com/s/1BlmtCFBq1uIWk23CT6y7Hw  密碼:g74j

下載完成之後進行安裝,安裝命令如下:

./configure
make
make install

3.4 編寫網路訊息處理程式

#include <fcgi_stdio.h>
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\n" );
    }
    return 0;
}

該段程式碼的意思是當接收到瀏覽器請求時,回覆Hello, World至瀏覽器。

採用如下命令進行編譯、連結

g++ main.cpp -o helloworld -lfcgi

輸出檔案可以隨便命名,本文命名為helloworld。

3.5 修改nginx.conf檔案

在http->server中新增如下location

        location = /demo.cgi
        {
                fastcgi_pass 127.0.0.1:8081;
                fastcgi_index index.cgi;
                include fastcgi.conf;
        }

上述location的意思是所有到達/demo.cgi的請求都轉移至執行在127.0.0.1:8081地址的程式中。

修改完畢後,重新載入配置檔案,或者重啟nginx

3.6 執行fastcgi程序

spawn-fcgi -a 127.0.0.1 -p 8081 -f path-to-helloworld/helloworld

3.7 瀏覽器中輸入 本機ip:8080/demo,即可瀏覽器中顯示“Hello, World”

ps:

1,通過ifconfig得到本機ip

2,輸入localhost/demo會提示無法訪問此網站,因為cgi程式不能使用環回地址,需要使用的是本機ip

3,執行在8081埠的程式可以隨便命名,不必與瀏覽器輸入、nginx.confg中配置保持一致

4,瀏覽器輸入必須與nginx.config中配置的http->server中內容保持一致,要不然無法轉發的相應後臺程式,此時提示無法訪問此網站