很难理解如何正确使用 FastCGI 进程和 NGINX。与 Apache 不同,NGINX 不会自动生成 FCGI 进程。所以我首先apt-get fcgiwrap spawn-fcgi
……
我使用命令生成了一个 fcgi 进程
sudo spawn-fcgi -f /usr/sbin/fcgiwrap -s /tmp/fcgiwrap.socket
但我的浏览器中仍然出现错误502 Bad Gateway
,并且我的 NGINX 错误日志中出现以下错误
*68 connect() to unix:/tmp/fcgiwrap.socket failed (13: Permission denied) while connecting to upstream client xxx.xxx.xxx.xxx, server: git.example.com, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/tmp/fcgiwrap.socket:", host: "git.example.com"
cgi 应用程序是 gitweb,我的 NGINX 配置如下:
server {
listen 443 ssl;
server_name git.example.com;
location /index.cgi {
root /usr/share/gitweb;
include fastcgi_params;
gzip off;
fastcgi_param SCRIPT_NAME $uri;
fastcgi_param GITWEB_CONFIG /etc/gitweb.conf;
fastcgi_pass unix:/tmp/fcgiwrap.socket;
}
location / {
root /usr/share/gitweb;
index index.cgi;
}
ssl_certificate /.../fullchain.pem;
ssl_certificate /.../privkey.pem;
}
后续问题:如果我想创建一个用于生成 fastcgi 的初始化脚本,例如 NGINX 示例这里,我只需要改变BIND=/tmp/fcgiwrap.socket
和吗PHP_CGI=/usr/sbin/fcgiwrap
?
答案1
对于遇到同样问题的人。我最初只是创建了一个名为fcgiwrap.socket
和 的文件chown www-data fcgiwrap.socket
。我没有意识到的是,每当你使用来生成一个 fastcgi 进程时,它都会终止任何先前的套接字并创建一个新的套接字。对我来说,因为我不是 root 用户,所以我必须使用来运行chgrp www-data fcgiwrap.socket
chmod g+x fcgiwrap.socket
spawnfcgi
sudo
spawnfcgi
sudo spawnfcgi -a /usr/sbin/fcgiwrap -s /tmp/fcgiwrap.socket`
正如我所说,这将创建一个新的套接字,更重要的是,在 root 下。因此,只需chmod,chgrp,chown
在生成 fastcgi 进程后重新运行,您就应该解决权限被拒绝错误。