我正在运行 Debian 服务器,其中 nginx chrooted 在 /var/chroot/nginx 中。它运行良好,但我希望能够运行 cgit 并托管我的 gitolite 存储库。
当它脱离 chroot 时,它会给我和现在一样的错误,即:
2012/12/08 14:25:19 [error] 9179#0: *3 FastCGI sent in stderr: "Cannot get script name, is DOCUMENT_ROOT and SCRIPT_NAME set and is the script executable?" while reading response header from upstream
我确信这是 fastcgi 的问题...下面是我的 nginx.conf 中的相关行:
server {
listen 80;
server_name git.url.tld;
access_log /var/log/nginx/cgit.access.log;
error_log /var/log/nginx/cgit.error.log;
root /var/www/htdocs/cgit;
location ~* ^.+\.(css|png|ico)$ {
root /var/www/htdocs/cgit;
expires 30d;
}
location / {
root /var/www/htdocs/cgit;
fastcgi_param SCRIPT_NAME cgit.cgi;
fastcgi_param DOCUMENT_ROOT /var/www/htdocs/cgit;
fastcgi_param PATH_INFO $uri;
fastcgi_param QUERY_STRING $args;
fastcgi_pass unix:/tmp/cgi.sock;
}
}
有什么线索吗?Fastcgi、fcgi-wrap 等都在 chroot 之外,因为在 chroot 中拥有 cgit、fastcgi 和 gitolite 似乎有点多余。fastcgi 在 /var/chroot/nginx/tmp/cgi.sock 处打开了一个套接字。
感谢您的帮助!!
答案1
这可能是 debian squeeze (1.0-1+squeeze1) 版本中的 fcgiwrap 的一个错误。请参阅http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=698071
升级到 fcgiwrap 1.0.3-3 解决了我的问题。