cgit 仅适用于命令行,不适用于 nginx

cgit 仅适用于命令行,不适用于 nginx

像很多次一样,我使用虚拟机来测试一些东西。这就是为什么配置可能有点混乱的原因。我只是尝试让 cgit 与 nginx 一起运行。

我创建了一个包含 git 存储库的目录/git(所有者:) 。我的 cgit 配置 ( ) 是:www-data:www-data/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

问题是由 引起的fastcgi_param PATH_INFO $uri;。假设您访问http://example.com/htdocs/cgit/myrepo/并尝试在 cgit 中查看您的“myrepo”Git 存储库。$uri将是/htdocs/cgit/myrepo/。cgit 看到的PATH_INFO/htdocs/cgit/myrepo/。由于您没有名为“htdocs”的 Git 存储库,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;

致谢:

相关内容