Я пытаюсь настроить cgit с помощью nginx через uwsgi. Мне удалось заставить главную страницу работать на example.com/ и добавить свои репозитории, но когда я пытаюсь получить доступ к репо в example.com/somerepo, я получаю ошибку 502.
Я знаю, что cgit работает нормально, потому чтоЯ могу запустить cgit.cgi
с переменной окружения QUERY_STRING="url=somerepo"
и без нее, и она генерирует правильный HTML-код для главной страницы и страницы somerepo
соответственно.
Я пытался отладить проблему с помощью nginxЖурналы ошибок с уровнем отладки, strace и gdb на nginx и cgit.cgi и выводом uwsgi, это то, что я нашел до сих пор:
Когда я нажимаю на somerepo
ссылка на главной странице cgit uwsgi отправляет запрос GET на /somerepo
, а nginx пытается открыть каталог в /htdocs/somerepo
, который не может найти, потому что он не существует. (Я полагаю, cgit.cgi должен генерировать это на лету). Я знаю это по strace stat("/usr/share/webapps/cgit/1.2.1/htdocs/olisrepo/", 0x7ffdf4c817c0) = -1 ENOENT (No such file or directory)
Когда я нажимаю на ссылку somerepo
, я получаю read(8, 0x561749c8afa0, 65536) = -1 EAGAIN (Resource temporarily unavailable)
от strace cgit.cgi.
Когда я пытаюсь посетить недействительный URL-адрес, такой как somerepotypo
, он правильно генерирует страницу 404 с надписью «репозитории не найдены».
Это мои файлы конфигурации:
/ etc / nginx / nginx.conf
user nginx nginx;
worker_processes 1;
error_log /var/log/nginx/error_log debug;
events {
worker_connections 1024;
use epoll;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main
'$remote_addr - $remote_user [$time_local] '
'"$request" $status $bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$gzip_ratio"';
client_header_timeout 10m;
client_body_timeout 10m;
send_timeout 10m;
connection_pool_size 256;
client_header_buffer_size 1k;
large_client_header_buffers 4 2k;
request_pool_size 4k;
gzip off;
output_buffers 1 32k;
postpone_output 1460;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 75 20;
ignore_invalid_headers on;
# Cgit
server {
listen 80;
server_name example.com;
root /usr/share/webapps/cgit/1.2.1/htdocs;
access_log /var/log/nginx/access_log main;
error_log /var/log/nginx/error_log debug;
location ~* ^.+(cgit.(css|png)|favicon.ico|robots.txt) {
root /usr/share/webapps/cgit/1.2.1/htdocs;
expires 30d;
}
location / {
try_files $uri @cgit;
}
location @cgit {
include uwsgi_params;
uwsgi_modifier1 9;
uwsgi_pass unix:/run/uwsgi/cgit.sock;
}
}
}
cgit.ini (я загружаю это с помощью uwsgi --ini /etc/uwsgi.d/cgit.ini)
[uwsgi]
master = true
plugins = cgi
chmod-socket = 666
socket = /run/uwsgi/%n.sock
uid = nginx
gid = nginx
processes = 1
threads = 1
cgi = /usr/share/webapps/cgit/1.2.1/hostroot/cgi-bin/cgit.cgi
/ etc / cgitrc
css=/cgit.css
logo=/cgit.png
mimetype-file=/etc/mime.types
virtual-root=/
remove-suffix=1
enable-git-config=1
scan-path=/usr/local/cgitrepos
Можете ли вы помочь мне исправить это? Заранее спасибо