cgit работает только в командной строке, но не с nginx
Как и много раз, я использовал виртуальную машину, чтобы что-то проверить. Это причина, почему конфигурация может быть немного грязной. Я просто пытаюсь запустить cgit с помощью nginx.
Я создал каталог /git
(Владелец: www-data:www-data
), который содержит Git-репозиторий. Моя конфигурация cgit (/etc/cgitrc
) является:
virtual-root=/htdocs/cgit/
css=/htdocs/cgit/cgit.css
logo=/htdocs/cgit/cgit.png
scan-path=/git
И я добавил следующий раздел на сервер по умолчанию в /etc/nginx/sites-available/default
:
location ~* ^.+\.(css|png|ico)$ {
expires 30d;
}
location /htdocs/cgit/ {
index cgit.cgi
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /var/www/htdocs/cgit/cgit.cgi;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
fastcgi_param PATH_INFO $uri;
fastcgi_param QUERY_STRING $args;
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;
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;
}
Если я открою браузер сейчас и открою https://192.168.80.129/htdocs/cgit/
Я вижу интерфейс cgit. Но нет репозиториев. Есть только сообщение no repository found
,
Возможно, моя конфигурация не идеальна, но она почти работает. Если я открою командную строку и выполню su www-data -c /var/www/htdocs/cgit/cgit.cgi
тогда я могу увидеть хранилище, которое я создал в /git
:
[...]
</form></td></tr></table>
<div class='content'><table summary='repository list' class='list nowrap'><tr class='nohover'><th class='left'><a href='/htdocs/cgit/?s=name'>Name</a></th><th class='left'><a href='/htdocs/cgit/?s=desc'>Description</a></th><th class='left'><a href='/htdocs/cgit/?s=owner'>Owner</a></th><th class='left'><a href='/htdocs/cgit/?s=idle'>Idle</a></th></tr>
<tr><td class='toplevel-repo'><a title='yolo' href='/htdocs/cgit/yolo/'>yolo</a></td><td><a href='/htdocs/cgit/yolo/'>Unnamed repository; edit this file 'description' to name the repository.
</a></td><td>www-data</td><td><span class='age-mins'>9 min.</span></td></tr>
</table></div> <!-- class=content -->
<div class='footer'>generated by cgit v0.9.1-27-gd5a4 at 2014-08-21 23:02:37 (GMT)</div>
</div> <!-- id=cgit -->
[...]
Я подумал, может быть, "nginx-cgit" не читает файл конфигурации (/etc/cgitrc
), но при изменении логотипа настройка логотипа на веб-странице также изменяется.
К сожалению, нет информации об этой проблеме в /var/log/nginx/error.log
а также /var/log/nginx/access.log
,
Спасибо за любые идеи.
--РЕДАКТИРОВАТЬ--
Я пытался и пытался, но сейчас я только что установил gitphp ( http://www.gitphp.org/), который, кажется, работает без проблем.
Спасибо:)
1 ответ
Проблема вызвана . Предположим, вы посетитеhttp://example.com/htdocs/cgit/myrepo/
при попытке просмотреть ваш репозиторий Git "myrepo" в cgit. будет . cgit видит, что это/htdocs/cgit/myrepo/
. Поскольку у вас нет репозитория Git с именем «htdocs», cgit отобразит «Репозитории не найдены». ВерноеPATH_INFO
должно быть/myrepo/
. Другими словами, вам необходимо удалить/htdocs/cgit
префикс из$uri
.
У Nginx есть полезнаяfastcgi_split_path_info
директива, которая может помочь нам здесь. В вашем случае замените неправильныйfastcgi_param PATH_INFO $uri;
со следующим:
fastcgi_split_path_info ^(/htdocs/cgit)(.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
Кредиты: