nginx, fastcgi and 502 errors wiht spawn issues
我正在尝试让fastcgi在Nginx上工作。我知道配置文件是正确的,因为它之前已经起作用了,我怀疑我的C程序以及如何设置fcgi文件被nginx读取。这些是我所采取的步骤。我在使用fastcgi的Ubuntu,nginx,c。我做错了什么?
1)编译程序
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)运行以下
1 2 | 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身份运行命令,则会得到以下信息:
1 | spawn-fcgi: I will not set uid to 0 |
5)浏览到http://127.0.0.1/rtbCookieServer.fcgi,在该文件中我出现502错误,并且该错误在我的日志文件中出现
1 | 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上侦听的内容时,我得到以下allomg以及其他一些诊断信息:
1 2 3 4 5 6 7 8 9 | 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?
对于诊断,我运行./rtbCookieServer.fcgi --9000并获得预期的输出。
这是我的文件权限。
1 | -rwxr-xr-x 1 root root 1580470 2012-01-23 14:28 rtbCookieServer.fcgi |
这是我的配置文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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; } } |
它之所以说是rtbCookie,是因为lsof使用固定宽度的列,而rtbCookie就足够了。
在处理您发回的标头时,听起来有些混乱。我怀疑您的回复中有轻微的格式错误。每个标头应以\\\\结尾
\\\\
在最后一个标头和响应的正文之间,必须有一个空行,并且以\\\\结尾
\\\\