nginx 的 gitlab 容器代理传递不适用于推送请求
Posted
技术标签:
【中文标题】nginx 的 gitlab 容器代理传递不适用于推送请求【英文标题】:gitlab container proxy pass by nginx doesn't work with push request 【发布时间】:2020-10-15 17:50:19 【问题描述】:我的 docker 上有 3 个容器。我想将 gitlab 作为子域。 我的 gitlab 容器端口是:
443/tcp, 0.0.0.0:10022->22/tcp, 0.0.0.0:10080->80/tcp
gitlab 容器已使用此命令创建:
docker run --detach --name gitlab --restart=always\
--publish 10022:22 --publish 10080:80 \
--network nginx_network \
--volume /srv/gitlab/config:/etc/gitlab \
--volume /srv/gitlab/logs:/var/log/gitlab \
--env 'EXTERNAL_URL=https://develop.domain.com' \
--volume /srv/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest
我的 nginx 配置是:
upstream isa_fire
server isa_fire:8000;
upstream gitlab
server gitlab:80;
upstream gedata
server geoserver:8080;
server
listen 80;
server_name domain.com www.domain.com;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
root /usr/share/nginx/html;
index index.html index.htm;
location /
proxy_pass http://isa_fire;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
location /static/
alias /isa_fire/static/;
location /files/
alias /isa_fire/;
server
listen 80;
server_name develop.domain.com www.develop.domain.com;
location /
proxy_pass http://gitlab;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
server
listen 80;
server_name geoserver.domain.com www.geoserver.domain.com;
location /
proxy_pass http://gedata;
client_max_body_size 240M;
我的 gitlab 上的浏览器一切正常。但是当我尝试推动时:
git push -u origin master
几分钟后遇到此错误:
*ssh: 连接到主机develop.domain.com 端口22: 连接超时 致命:无法从远程存储库读取。
请确保您拥有正确的访问权限 并且存储库存在*
【问题讨论】:
【参考方案1】:如果您想使用 SSH,我认为您也需要公开端口 22。
这意味着您的 nginx 配置必须使用第二个服务器进行扩展,该服务器侦听端口 22,并且代理将其传递给您的 gitlab docker 容器。
还必须在路由器设置中转发/打开端口 22!
我希望这会有所帮助!
【讨论】:
【参考方案2】:有两种方法可以解决这个问题,
将 docker host ssh 端口从 22 更改为其他端口,然后使用这些端口创建 gitlab 容器 22:22 ,10080:80, 443
或者你可以编辑你的项目的 .git/config 文件,在地址中添加端口 10022 在 url 的末尾
顺便说一句,您可以使用项目的 http(s) url 拉取和推送,然后离开 ssh ?
【讨论】:
以上是关于nginx 的 gitlab 容器代理传递不适用于推送请求的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的容器注册表适用于 gitlab 自动部署,但不适用于我的自定义管道?
如何将 Gitlab 的 Auto DevOps 用于多容器应用程序?
使用 nginx 的 Websocket 代理不适用于 tomcat。