cgit + uwsgi + nginx не генерирует страницы для репозиториев - PullRequest
0 голосов
/ 30 сентября 2019

Я пытаюсь настроить 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

Можете ли вы помочь мне исправить это? Заранее спасибо

...