我正在努力編寫一個由nginx提供服務的C++ fastcgi程序。我有程序編譯和hello world的例子,但我似乎無法從nginx獲取任何環境變量(REQUEST_METHOD)等。據我所知,我正在跟隨教程,並具有相同的配置,所以我真的在這裏拉我的頭髮,爲什麼它不工作。這裏是我的配置:用nginx在C++中用fastcgi訪問環境變量
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/html\r\n"
"\r\n";
cout << "Environment is: " << *request.envp;
}
到FCGX_GetParam調用返回空,並且當我輸出request.envp所示,唯一的變量是FCGI_ROLE = RESPONDER。
我使用下面的命令來啓動進程:
spawn-fcgi -p 9000 -n FCGI-App
一切的Ubuntu 11.10下運行。
任何想法?
只是猜測 - 是有可能,nginx的不傳ENV數據由於缺少某些權限? – 2012-07-18 19:33:39