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中内容保持一致,要不然无法转发的相应后台程序,此时提示无法访问此网站