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中內容保持一致,要不然無法轉發的相應後臺程式,此時提示無法訪問此網站