NGINX fastcgi代理上具有git-http-backend的多个同时请求

问题描述 投票:0回答:2

我有git-http-backend通过nginx fastcgi代理提供git仓库。 Nginx配置看起来像:

server {
    listen               443 ssl;
    server_name          git.example.com;

    auth_basic           "Git Access";
    auth_basic_user_file /etc/nginx/.htpasswd_git;
    error_log            /var/log/nginx-git-error.log;
    access_log           /var/log/nginx-git-access.log;
    client_max_body_size 0;

    root /var/git/;

    location ~ /git(/.*) {

        fastcgi_pass  unix:/var/run/fcgiwrap.socket;
        include       fastcgi_params;
        fastcgi_param SCRIPT_FILENAME     /usr/lib/git-core/git-http-backend;
        fastcgi_param GIT_PROJECT_ROOT    /var/git;
        fastcgi_param REMOTE_USER         $remote_user;
        fastcgi_param PATH_INFO           $1;
        fastcgi_read_timeout              600;
    }
}

[从测试看来,如果一次有多个请求,则代理将失败(代码为504),并且通过一些Google搜索似乎证实了我对git-http-backend无法支持多个请求的怀疑。

我如何进行设置,以便可以一次向git repo发出多个请求?

git nginx webserver fastcgi
2个回答
1
投票

我最近遇到了同样的情况并很快发现this script on github

它为每个新的http请求生成一个新的git-http-backend实例。通过

编译它(需要安装语言)
go build git-http-multi-backend.go

并运行

./git-http-multi-backend -r /Path/To/Repos

这将使其在:80上侦听(端口可以更改)。现在,您只需将您的nginx配置更改为类似

location ~ /git(/.*) {
    proxy_pass http://localhost:80;
}

我确实承认,这不是最优雅的解决方案,因为绝对可以通过摆弄nginx配置来实现相同的效果。 git-http-multi-backend工具的作者甚至谈到了它,但是缺少任何具体的实现示例。


0
投票

而且我刚刚找到了另一个解决方案,它比我以前使用git-http-multi-backend的解决方案还要简单

您需要增加可产生的最大FCGI_CHILDREN数量。

就我而言,我编辑了/etc/init.d/fcgiwrap并将FCGI_CHILDREN设置为例如3.现在,我可以立即签出/克隆/推送3个仓库。

© www.soinside.com 2019 - 2024. All rights reserved.