1

我正在尝试通过 uwsgi 使用 nginx 配置 cgit。我设法让主页在 example.com/ 上运行并添加了我的存储库,但是当我尝试访问 example.com/somerepo 中的存储库时出现 502 错误。

我知道 cgit 工作正常,因为我可以在cgit.cgi有和没有QUERY_STRING="url=somerepo"环境变量的情况下运行,它分别为主页和somerepo页面生成正确的 html。

我一直在尝试使用 nginx 和 cgit.cgi 上的带有调试级别、strace 和 gdb 的 nginx 错误日志以及 uwsgi 的输出来调试问题,这是我目前发现的:

  • 当我单击somerepocgit 主页上的链接时,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)从 cgit.cgi 的 strace 获得。

  • 当我尝试访问一个无效的 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

你能帮我解决这个问题吗?提前致谢

4

0 回答 0