web-dev-qa-db-ja.com

Howto Nginx + git-http-backend + fcgiwrap(Debian Squeeze)

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の権限があります。

5
brainsqueezer

下に移動 fastcgi_pass;それは最新の行でなければなりません。

最初にパラメータを設定する必要があり、次にfastcgi_pass、そうでないと、設定された環境を取得できません。

fastcgi_pass unix:/var/run/fcgiwrap.socket;

4
SysMan

構成ファイルの2行の順序を変更してみてください。

include /etc/nginx/fastcgi_params2;

fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend;
2
heroxbd

これはおそらく、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;
    }
}
1
gueux