我无法将 nginx 设置为与自定义 cgi 程序一起使用(使用 xmlrpc-c 库)。
我正在尝试使用 fcgiwrap/spawn-fcgi,如下所示:
$ spawn-fcgi -f /usr/bin/fcgiwrap -s /tmp/fcgi.sock
nginx.conf 文件的重要部分是
location /cgi-bin/test {
root /usr/share/nginx/html/cgi-bin/test/;
include /etc/nginx/fastcgi.conf;
#fastcgi_pass 127.0.0.1:8000;
fastcgi_pass unix:/tmp/fcgi.sock;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html/cgi-bin/test$fastcgi_script_name;
}
我已经尝试了 soceket 文件和 ipv4/portnumber 组合,但出现错误:
2013/08/22 18:52:55 [notice] 1645#0: signal process started
2013/08/22 18:52:57 [crit] 1653#0: *1 connect() to unix:/tmp/fcgi.sock failed (13: Permission denied)
while connecting to upstream, client: 127.0.0.1, server: localhost,request: "POST /cgi-bin/test/listaccounta HTTP/1.1", upstream: "fastcgi://unix:/tmp/fcgi.sock:", host: "localhost", referrer: "http://localhost/some_page.php"
如果我乱用选项,有时也会收到 502 Bad Gateway。我尝试了谷歌搜索到的所有组合(包括修改 /etc/nginx/fastcgi.conf 文件)(请注意,nginx.conf 中有用于 php cgi 和我的测试程序的单独部分,php 运行良好)
我卡住了,不知道如何配置它,我是否遗漏了什么?
这部分尤其如此:
在 nginx.conf 中
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html/cgi-bin/test/$fastcgi_script_name; #不起作用,报告以下错误
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html/cgi-bin/test/my_prog; #可以工作
Cannot get script name, are DOCUMENT_ROOT and SCRIPT_NAME (or SCRIPT_FILENAME) set and is the script executable?
我有多个程序,如何设置可执行文件不被固定(如上面的 my_prog)?
谢谢
答案1
看起来 nginx 没有读取/写入 fastcgi 套接字的权限:
2013/08/22 18:52:57 [crit] 1653#0: *1 connect() to unix:/tmp/fcgi.sock failed (13: Permission denied)
您应该确保用于启动 nginx 的用户帐户可以访问 fcgi 创建的套接字文件。它们都是以同一用户身份启动的吗?