Я пытаюсь настроить git-http-backend с Nginx, но после 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.
and I can request an unexistant project and I will get the same answer
$ 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;
Попробуйте изменить порядок между двумя строками в файле конфигурации:
include /etc/nginx/fastcgi_params2;
fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend;
Вероятно, это ошибка версии fcgiwrap, обнаруженная в debian squeeze (1.0-1 + squeeze1). Видеть http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=698071
Обновление до fcgiwrap 1.0.3-3 (обнаружено при тестировании debian) решило проблему для меня. Вот конфигурация, которую я использовал (обратите внимание, что мне не нужно было определять "root"):
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;
}
}