我想用Nginx设置git-http-backend,但是在24小时之后浪费时间和阅读所有我能想到的configuration应该可以工作,但是不能。
server { listen 80; server_name mydevserver; access_log /var/log/nginx/dev.access.log; error_log /var/log/nginx/dev.error.log; location / { root /var/repos; } location ~ /git(/.*) { gzip off; root /usr/lib/git-core; fastcgi_pass unix:/var/run/fcgiwrap.socket; include /etc/nginx/fastcgi_params2; fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend; fastcgi_param DOCUMENT_ROOT /usr/lib/git-core/; fastcgi_param SCRIPT_NAME git-http-backend; fastcgi_param GIT_HTTP_EXPORT_ALL ""; fastcgi_param GIT_PROJECT_ROOT /var/repos; fastcgi_param PATH_INFO $1; #fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; } }
/ etc / nginx / fastcgi_params2的内容
fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; fastcgi_param REMOTE_USER $remote_user; # required if PHP was built with --enable-force-cgi-redirect fastcgi_param REDIRECT_STATUS 200;
但configuration似乎不工作
$ git clone http:// mydevserver / git / myprojectname / 克隆到myprojectname中 警告:远程HEAD是指不存在的裁判,无法结帐。
我可以申请一个不感兴趣的项目,我会得到同样的答案
$ git clone http:// mydevserver / git / thisprojectdoesntexist / 克隆到这个项目是不是... 警告:远程HEAD是指不存在的裁判,无法结帐。
如果我将根改为/ usr / lib,我将得到一个403错误,这将报告给nginx错误日志:
2011/11/23 15:52:46 [error] 5224#0:* 55在stderr中发送FastCGI:“无法获取脚本 名称,是DOCUMENT_ROOT和SCRIPT_NAME设置,并且是可执行的脚本? 读取来自上游的响应头,客户端:198.168.0.4,服务器:mydevserver, 请求:“GET / git / myprojectname / info / refs HTTP / 1.1”,上游: “fastcgi:// unix:/var/run/fcgiwrap.socket:”,主机:“mydevserver”
我的主要问题是使用此configuration的正确根值。 也许有一些权限问题。
笔记:
/ var / repos /由www-data拥有,并包含文件夹位git裸回购。
所有这一切使用SSH完美。
如果我使用浏览器访问http:// mydevserver / git / myproject / info / refs ,则由git-http-backend回答,要求我发送命令。
/var/run/fcgiwrap.socket有777个权限。
向下移动fastcgi_pass
; 它应该是最新的一行。
首先你应该设置参数,只有fastcgi_pass
,否则你将不会得到设置的环境。
fastcgi_pass unix:/var/run/fcgiwrap.socket;
尝试改变configuration文件中两行之间的顺序:
include /etc/nginx/fastcgi_params2; fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend;
这可能是在debian squeeze(1.0-1 + squeeze1)上find的fcgiwrap版本的bug。 请参阅http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=698071
升级到fcgiwrap 1.0.3-3(在debiantesting中find)解决了我的问题。 这里是我使用的configuration(注意我不需要定义“根”):
server { listen 80; server_name mydevserver; access_log /var/log/nginx/dev.access.log; error_log /var/log/nginx/dev.error.log; location ~ /git(/.*) { gzip off; fastcgi_pass unix:/var/run/fcgiwrap.socket; include /etc/nginx/fastcgi_params2; fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend; fastcgi_param GIT_HTTP_EXPORT_ALL ""; fastcgi_param GIT_PROJECT_ROOT /var/repos; fastcgi_param PATH_INFO $1; } }