我正在尝试使用fastcgi来处理nginx。我知道配置文件是正确的,因为它以前工作,我怀疑我的c ++程序以及如何设置fcgi文件由nginx读取。这些是我承担的步骤。我正在使用Ubuntu,nginx,c ++和fastcgi。我做错了什么?
1)编译程序
g++ -o rtbCookieServer.fcgi rtbCookieServer.o -lfcgi++ -lboost_system -lcgicc -L/home/cpp/mongo-cxx-driver-v2.0 -I/home/cpp/mongo-cxx-driver-v2.0/mongo
2)将rtbCookieServer.fcgi移动到/ var / www
3)sudo / var / www chmod a + x rtbCookieServer.fcgi
4)运行以下
spawn-fcgi.standalone -u root -g root -G www-data -a 127.0.0.1 -p 9000 -f /var/www/rtbCookieServer.fcgi
spawn-fcgi: child spawned successfully: PID: 2398
如果我尝试以root身份运行命令,我会得到:
spawn-fcgi: I will not set uid to 0
5)浏览到http://127.0.0.1/rtbCookieServer.fcgi,我的日志文件中出现502错误和此错误
2012/01/23 15:19:03 [error] 1189#0: *1 upstream closed prematurely FastCGI stdout while reading response header from upstream, client: 127.0.0.1, server: localhost, request: "GET /rtbCookieServer.fcgi HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "127.0.0.1"
当我查看端口9000上正在侦听的内容时,我会通过其他诊断获得以下alomg:
sudo lsof -i :9000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rtbCookie 2398 marktest 0u IPv4 17598 0t0 TCP localhost:9000 (LISTEN)
netstat -an | grep 9000
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN
ps auxww | grep rtbCookieServer.fcgi
1000 2398 0.0 0.0 24616 360 ? Ss 15:08 0:00 /var/www/rtbCookieServer.fcgi
Now..1)为什么命令说rtbCookie而不是rtbCookieServer?即使我杀死进程并重新运行spawn命令......仍然说rtbCookie。它不应该说rtbCookieServer吗?另外,为什么它对用户而不是root表示marktest?
对于Diagnostis我运行./rtbCookieServer.fcgi --9000并获得预期的输出。
这是我的文件权限。
-rwxr-xr-x 1 root root 1580470 2012-01-23 14:28 rtbCookieServer.fcgi
这是我的配置文件:
server {
listen 80;
server_name localhost;
location ~ \.fcgi$ {
root /var/www;
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.html;
fastcgi_param SCRIPT_FILENAME /$fastcgi_script_name;
include fastcgi_params;
}
}
答案 0 :(得分:1)
它说是rtbCookie,因为lsof使用固定宽度的列,而rtbCookie就是这样。
在处理你发回的标题时,听起来很困惑。我怀疑你的回复中有轻微的格式错误。每个标题应以\ r \ n结尾 在最后一个标题和您的响应正文之间必须是一个空行,也以\ r \ n
结尾