Nginxでgit-http-backendをセットアップしようとしていますが、24時間時間を無駄にしてすべてを読んだ後、この構成は機能するはずですが、機能しないと思います。
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;
しかし、設定が機能していないようです
$ git clone http://mydevserver/git/myprojectname/
Cloning into myprojectname...
warning: remote HEAD refers to nonexistent ref, unable to checkout.
$ git clone http://mydevserver/git/thisprojectdoesntexist/
Cloning into thisprojectdoesntexist...
warning: remote HEAD refers to nonexistent ref, unable to checkout.
Rootを/ usr/libに変更すると、403エラーが発生し、nginxエラーログに報告されます。
2011/11/23 15:52:46 [error] 5224#0: *55 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, client: 198.168.0.4, server: mydevserver,
request: "GET /git/myprojectname/info/refs HTTP/1.1", upstream:
"fastcgi://unix:/var/run/fcgiwrap.socket:", Host: "mydevserver"
私の主な問題は、この構成での正しいルート値にあります。たぶん、いくつかの権限の問題があります。
ノート:
/ 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;
構成ファイルの2行の順序を変更してみてください。
include /etc/nginx/fastcgi_params2;
fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend;
これはおそらく、debian squeeze(1.0-1 + squeeze1)で見つかったバージョンのfcgiwrapのバグです。 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=698071 を参照してください。
Fcgiwrap 1.0.3-3(debianテストで見つかりました)にアップグレードすると、問題が解決しました。これが私が使用した設定です(「ルート」を定義する必要がないことに注意してください):
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;
}
}