Nginx 配置允许通过 http 进行 git 克隆

Nginx 配置允许通过 http 进行 git 克隆

我的服务器背景:我把所有东西都放到了docker容器里。有一个docker网络。所有的docker容器都在同一个网络上。我使用别名来寻址我的容器。我的gitlab容器别名是gitlab.docker。这个问题的有趣容器是我的gitlab_runner容器、我的gitlab容器和我的nginx容器。

我注意到gitlab-runner当我的容器应该克隆一个项目时抛出了错误 18。

我非常确定这是一个nginx问题。我知道这是因为我进入了同一个 docker 网络上的一个容器,并且曾经尝试通过我的公共 dns 地址进行克隆,并且曾经通过内部网络绕过我自己的 nginx,结果(替换了我的域和我的顶级域。其余部分未受影响):

bash-5.0# git clone "http://gitlab.myHost.com/docker/sbt.git"
Cloning into 'sbt'...
Username for 'https://gitlab.myHost.com': root
Password for 'https://[email protected]': 
warning: redirecting to https://gitlab.myHost.com/docker/sbt.git/
remote: Enumerating objects: 16, done.
remote: Counting objects: 100% (16/16), done.
remote: Compressing objects: 100% (12/12), done.
error: RPC failed; curl 18 transfer closed with outstanding read data remaining
fatal: the remote end hung up unexpectedly
fatal: early EOF
fatal: unpack-objects failed

bash-5.0# git clone "http://gitlab.docker/docker/sbt.git"
Cloning into 'sbt'...
Username for 'http://gitlab.docker': root
Password for 'http://[email protected]': 
remote: Enumerating objects: 16, done.
remote: Counting objects: 100% (16/16), done.
remote: Compressing objects: 100% (12/12), done.
remote: Total 16 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (16/16), done.

这是我的 nginx 配置:

server {
  server_name gitlab.myHost.com;

  listen 80;
  listen 443 ssl;

  ssl_certificate /etc/letsencrypt/live/gitlab.myHost.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/gitlab.myHost.com/privkey.pem;

  include /etc/letsencrypt/options-ssl-nginx.conf; 

  if ($scheme != "https") {
      return 301 https://$host$request_uri;
  } 

  location / {
    proxy_pass http://gitlab.docker;
  }
}

有人知道为什么它不起作用吗?我应该说一下,gitlab 的网站运行良好。除了 Web IDE,它无法加载。以防万一它已连接,但这实际上是我待办事项中很远的一个问题。

答案1

好的,我找到了答案。我的仓库中有一个 55Mb 的二进制文件,太大了。将这个添加到我的配置中解决了这个问题:

client_max_body_size 4G;

问题是,4GB 是否太大了。但由于它只用于 Gitlab,我想目前是可以的。

相关内容