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