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

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

Ich versuche, git-http-backend mit Nginx einzurichten, aber nachdem ich 24 Stunden Zeit verschwendet und alles gelesen habe, was ich konnte, denke ich, dass diese Konfiguration funktionieren sollte, aber es tut sie nicht.


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;
}
}

Inhalt von /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;

aber die Konfiguration scheint nicht zu funktionieren

    $ git clone http://mydevserver/git/myprojectname/
    Cloning into myprojectname...
    warning: remote HEAD refers to nonexistent ref, unable to checkout.
und ich kann ein nicht existierendes Projekt anfordern und ich werde die gleiche Antwort erhalten
    $ git clone http://mydevserver/git/thisprojectdoesntexist/
    Cloning into thisprojectdoesntexist...
    warning: remote HEAD refers to nonexistent ref, unable to checkout.

Wenn ich Root auf /usr/lib ändere, erhalte ich einen 403-Fehler und dies wird an das Nginx-Fehlerprotokoll gemeldet:

    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"

Mein größtes Problem ist der richtige Root-Wert bei dieser Konfiguration. Vielleicht gibt es Probleme mit den Berechtigungen.

Anmerkungen:

  • /var/repos/ ist Eigentum von www-data und enthält Ordner mit Bit-Git-Bare-Repos.

  • All dies funktioniert perfekt mit SSH.

  • Gehe ich mit meinem Browser aufhttp://mydevserver/git/myproject/info/refsEs wird von git-http-backend beantwortet und ich werde aufgefordert, einen Befehl zu senden.

  • /var/run/fcgiwrap.socket hat 777 Berechtigungen.

Antwort1

nach unten verschieben fastcgi_pass; dies sollte die letzte Zeile sein.

Zuerst sollten Sie die Parameter festlegen, erst dann fastcgi_pass, sonst erhalten Sie die festgelegte Umgebung nicht.

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

Antwort2

Versuchen Sie, die Reihenfolge zwischen den beiden Zeilen in Ihrer Konfigurationsdatei zu ändern:

include /etc/nginx/fastcgi_params2;

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

Antwort3

Dies ist wahrscheinlich ein Fehler in der Version von fcgiwrap, die unter Debian Squeeze gefunden wurde (1.0-1+squeeze1). Siehehttp://bugs.debian.org/cgi-bin/bugreport.cgi?bug=698071

Das Upgrade auf fcgiwrap 1.0.3-3 (gefunden in Debian Testing) hat das Problem für mich gelöst. Hier ist die Konfiguration, die ich verwendet habe (beachten Sie, dass ich „root“ nicht definieren musste):

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;
    }
}

verwandte Informationen