用nginx在c++中用fastcgi访问环境变量
Accessing environment variables with fastcgi in c++ with nginx
我正在尝试编写一个由nginx提供服务的c++fastcgi程序。我已经编译了这个程序,helloworld的例子也能工作,但我似乎无法从nginx中获得任何环境变量(REQUEST_METHOD)等。据我所知,我正在遵循教程,并且有相同的配置,所以我真的很清楚为什么它不起作用。这是我的配置:
location /cgi {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.html;
include /etc/nginx/fastcgi_params;
}
(fastcgi_params与默认的nginx安装没有变化)。
然后是来自c++程序的相关代码:
streambuf * cin_streambuf = cin.rdbuf();
streambuf * cout_streambuf = cout.rdbuf();
streambuf * cerr_streambuf = cerr.rdbuf();
FCGX_Request request;
FCGX_Init();
FCGX_InitRequest (&request, 0, 0);
while (FCGX_Accept_r (&request) == 0)
{
fcgi_streambuf cin_fcgi_streambuf (request.in);
fcgi_streambuf cout_fcgi_streambuf (request.out);
fcgi_streambuf cerr_fcgi_streambuf (request.err);
#if HAVE_IOSTREAM_WITHASSIGN_STREAMBUF
cin = &cin_fcgi_streambuf;
cout = &cout_fcgi_streambuf;
cerr = &cerr_fcgi_streambuf;
#else
cin.rdbuf(&cin_fcgi_streambuf);
cout.rdbuf(&cout_fcgi_streambuf);
cerr.rdbuf(&cerr_fcgi_streambuf);
#endif
//figure out what kind of request we have
char * request_type = FCGX_GetParam("REQUEST_METHOD", request.envp);
cout << "Content-type: text/htmlrn"
"rn";
cout << "Environment is: " << *request.envp;
}
对FCGX_GetParam的调用返回null,当我输出request.envp时,显示的唯一变量是FCGI_ROLE=RESPONDER。
我使用以下命令启动流程:
spawn-fcgi -p 9000 -n FCGI-App
一切都在Ubuntu 11.10下运行。
有什么想法吗?
您正在尝试用cout << *request.envp
打印char **envp;
。这将只打印数组中的第一个字符串,这并不奇怪。
请尝试代码形式的官方FCGI示例:
static void penv(const char * const * envp)
{
cout << "<PRE>n";
for ( ; *envp; ++envp)
{
cout << *envp << "n";
}
cout << "</PRE>n";
}
...
penv(request.envp);
相关文章:
- 通过方法访问结构
- 使用不带参数的函数访问结构元素
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- 用于访问容器<T>数据成员的正确 API
- 访问者访问变体并返回不同类型时出错
- 尝试通过多个向量访问变量时,向量下标超出范围
- 无法访问嵌套类.类的使用无效
- 写入位置0x0000000C时发生访问冲突
- 我们可以访问一个不存在的联盟的成员吗
- C++从另一个类访问公共静态向量的正确方法是什么
- 我的简单if-else语句是如何无法访问的代码
- 从C++dll访问C#中的一行主要参数
- 概念TS检查忽略私有访问修饰符
- 访问被拒绝后,c++中的故障保护代码
- 在c++中访问int到类对象的映射时出错
- 我想访问std::unique_ptr中的一个特定元素
- 为什么示例代码访问IUnknown中已删除的内存
- C++:无法访问声明的受保护成员
- 如何使用FastCGI C/C 应用程序访问POST请求的主体
- 用nginx在c++中用fastcgi访问环境变量