Nginx&C++实现简单的fastcgi程序
来源:互联网 发布:java 泛型 class 参数 编辑:程序博客网 时间:2024/06/07 01:36
1. 安装spawn-fcgi (FastCGI进程管理器)
spawn-fcgi是一个通用的FastCGI进程管理器,简单小巧,原先是属于lighttpd的一部分,后来由于使用比较广泛,所以就迁移出来作为独立项目了。spawn-fcgi使用pre-fork 模型,功能主要是打开监听端口,绑定地址,然后fork-and-exec创建我们编写的fastcgi应用程序进程,退出完成工作。fastcgi应用程序初始化,然后进入死循环侦听socket的连接请求。
安装spawn-fcgi:
- 获取spawn-fcgi编译安装包,在http://redmine.lighttpd.net/projects/spawn-fcgi/wiki上可以获取当前最新的版本。
- 解压缩spawn-fcgi-x.x.x.tar.gz包。
- 进入解压缩目录,执行./configure。
- make & make install
如果遇到以下错误:“ ./autogen.sh: x: autoreconf: not found”,因为没有安装automake 工具,ubuntu用下面的命令安装好就可以了:sudo apt-get install autoconf automake libtool 。
spawn-fcgi的帮助信息可以通过man spawn-fcgi或spawn-fcgi –h获得,下面是部分常用spawn-fcgi参数信息:
-f <fcgiapp> 指定调用FastCGI的进程的执行程序位置-a <addr> 绑定到地址addr。-p <port> 绑定到端口port。-s <path> 绑定到unix domain socket-C <childs> 指定产生的FastCGI的进程数,默认为5。(仅用于PHP)-P <path> 指定产生的进程的PID文件路径。-F <childs> 指定产生的FastCGI的进程数(C的CGI用这个)-u和-g FastCGI使用什么身份(-u 用户 -g 用户组)运行,CentOS下可以使用apache用户,其他的根据情况配置,如nobody、www-data等。
2. 安装fastcgi库
sudo apt-get install libfcgi-dev
3. 编写cgi程序
main.cpp
#include <iostream> #include <fcgi_stdio.h> #include "fcgi_config.h" #include <stdlib.h>#include <sys/types.h> #ifdef HAVE_UNISTD_H #include <unistd.h> #endif using namespace std; int main(void) { int i; while(FCGI_Accept() >= 0){ printf("Content-type: text/html\r\n\r\n" \ "<html><head><title>Test</title></head>" \ "<body>%s %d " \ "<br> SERVER_SOFTWARE:%s " \ "<br> QUERY_STRING: %s " \ "<br> REQUEST_METHOD: %s " \ "<br> CONTENT_TYPE: %s " \ "<br> CONTENT_LENGTH: %s " \ "<br> SCRIPT_FILENAME: %s " \ "<br> SCRIPT_NAME: %s " \ "<br> REQUEST_URI: %s " \ "<br> DOCUMENT_URI: %s " \ "<br> DOCUMENT_ROOT: %s " \ "<br> SERVER_PROTOCOL: %s " \ "<br> REMOTE_ADDR: %s " \ "<br> REMOTE_PORT: %s " \ "<br> SERVER_ADDR: %s " \ "<br> SERVER_PORT: %s " \ "<br> SERVER_NAME: %s " \ "</body></html>", "Hello World", i++, getenv("SERVER_SOFTWARE"), getenv("QUERY_STRING"), getenv("REQUEST_METHOD"), getenv("CONTENT_TYPE"), getenv("CONTENT_LENGTH"), getenv("SCRIPT_FILENAME"), getenv("SCRIPT_NAME"), getenv("REQUEST_URI"), getenv("DOCUMENT_URI"), getenv("DOCUMENT_ROOT"), getenv("SERVER_PROTOCOL"), getenv("REMOTE_ADDR"), getenv("REMOTE_PORT"), getenv("SERVER_ADDR"), getenv("SERVER_PORT"), getenv("SERVER_NAME")); } return 0; }
编译:g++ -o main.cgi main.cpp -lfcgi
程序复杂当然可以写一个makefile
编译生成main.cgi后,运行spawn
spawn-fcgi -a 127.0.0.1 -p 8080 -f ./main.cgi
修改Nginx的配置文件
location ~ \.cgi$ { fastcgi_pass 127.0.0.1:8080; fastcgi_index index.fcgi; fastcgi_param SCRIPT_FILENAME /$fastcgi_script_name; include fastcgi_params; }
任何带cgi的URL访问都会指向main.cgi
然后用浏览器访问127.0.0.1/test.cgi,就可以看到结果了
fastcgi监听–>nginx连接上来–>fastcgi read,取得url和cookie这样参数,写到environ变量–>fastcgi以getenv方式取得参数
对于get请求来说,直接getenv(“QUERY_STRING”)就可以拿到,而对于post请求来说,参数是写到标准输入流中的,需要从stdin中读取,或者 cin >> content
- Nginx&C++实现简单的fastcgi程序
- 简单的nginx fastcgi配置
- Nginx + FastCGI 程序(C/C++)-1
- Nginx + FastCGI 程序(C/C++)
- Nginx + FastCGI 程序(C/C++) 搭建高性能web service的Demo及部署发布
- Nginx + FastCGI 程序(C/C++)搭建高性能web service的demo
- nginx配置spawn-fastcgi执行自己编写的CGI程序(c/c++)
- Nginx + FastCGI 程序(C/C++) 搭建高性能web service的Demo及部署发布
- Nginx + FastCGI 程序(C/C++) 搭建高性能web service的Demo及部署发布
- CentOS7—Nginx—FastCGI 程序(C/C++)
- 如何使Nginx支持FastCGI(C/C++) (支持调用多个FastCGI程序)
- C++写一个简单的fastcgi程序
- c 语言写的fastcgi 程序
- 【入门篇】Nginx + FastCGI 程序(C/C++) 搭建高性能web service的Demo及部署发布
- 【入门篇】Nginx + FastCGI 程序(C/C++) 搭建高性能web service的Demo及部署发布
- 【入门篇】Nginx + FastCGI 程序(C/C++) 搭建高性能web service的Demo及部署发布
- 【入门篇】Nginx + FastCGI 程序(C/C++) 搭建高性能web service的Demo及部署发布
- Nginx+fastcgi+c/c++介绍
- STM32F407和LAN8720调试记录
- Hive安装及使用
- pandas的factorize(),numpy库unique函数
- Linux系统安装svn
- 可变参数列表解析
- Nginx&C++实现简单的fastcgi程序
- struts2
- 微信小程序--request(ajax)请求
- JS获取word文档内容到html页面
- Standby/Stop调试总结
- vue+webpack实现精美游戏设计:实现建筑物的渐变生成效果
- ListView/GridView嵌套CheckBox滑动时CheckBox选中状态显示错乱
- 初学Idea开发工具
- 测试设计-基于结构的测试