通过 Nginx 代理对 Gitlab 服务器进行 Git 克隆不起作用

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

我的 Nginx 服务器充当 Gitlab 服务器的代理,问题是当我尝试“

**git clone [email protected]:username/project.git**
”时,我无法克隆该项目 [它不是从 Nginx 服务器到 Gitlab 服务器的隧道]

当我使用 Gitlab 服务器的 IP 地址更新本地系统的 /etc/hosts 文件时,它无需密码即可正常克隆 [我已使用 Gitlab 上的 SSH 公钥更新了我的个人资料]。

所以我得出的结论是,我必须使用可以通过 Nginx 服务器将 SSH 通信从任何客户端系统隧道传输到 Gitlab 服务器的规则来更新我的 Nginx 配置。

通过如下更改尝试了此Link上的代码:

upstream gitlab {
server 192.168.61.102:22;
}

server {
listen 22;
server_name gitlab.example.com;

location / {
proxy_set_header  X-Real-IP  $remote_addr;
proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;

proxy_pass http://gitlab;
}
}

但它不起作用。如果有人帮助我调整规则以使其发挥作用,那就太好了。

注意:上面代码中的192.168.61.102是我的gitlab服务器的IP地址,我的Nginx服务器是192.168.61.101

nginx gitlab reverse-proxy ssh-tunnel
3个回答
7
投票

首先,您需要停止让 Nginx 侦听端口 22。Nginx 不处理 SSH 转发,而是您的防火墙。

如果您使用 iptables,那么这些规则将通过您的 Nginx 主机将所有请求转发到您的 Gitlab 主机。

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 22 -j DNAT --to-destination [GITLAB-IP]:22
sudo iptables -t nat -A POSTROUTING -o eth0 -p tcp --dport 22 -j SNAT --to-source [NGINX-IP]

您可能需要更改这些命令中的

eth0
以适应您的服务器设置。


然后您需要通过编辑

/etc/sysctl.conf
文件并取消注释此行来启用数据包转发:

net.ipv4.ip_forward=1

然后使用此命令重新加载您刚刚更改的配置:

sudo sysctl -p

最后,这些 iptables 规则默认情况下并不持久,并且会在您重新启动服务器时被删除。使它们持久化的最简单方法是使用

iptables-persistent
包。您可以像这样安装该软件包:

sudo apt-get install iptables-persistent

安装后,您可以随时使用以下命令保存/恢复 iptables 规则:

sudo invoke-rc.d iptables-persistent save
sudo invoke-rc.d iptables-persistent reload

如果您使用的是 Ubuntu 16.04 或更高版本,那么这些命令是

sudo netfilter-persistent save
sudo netfilter-persistent reload

在规则生效并测试它们后,您将需要运行保存命令。然后,当您的服务器重新启动时,您保存的规则将自动加载。


2
投票

Nginx 代理用于 http 请求。

通过 SSH 克隆时,您没有使用 http。

您需要做的是在路由器上使用端口转发或服务器上的 iptables 之类的东西。


0
投票

如果您之前没有使用过 iptables 规则,我不建议您更改它。重新加载 ssh

systemctl restart sshd

  1. 更改您的 SSH 端口,例如更改为 22000。您可以通过编辑反向代理主机上的 /etc/ssh/sshd_config 文件来完成此操作。

  2. 更改 /etc/nginx/nginx.conf 文件。在 http 部分之前添加以下内容:

stream {
  upstream gitlab_servers {
    least_conn;
    server  glab_server_ip:glab_server_port;
  }

  server {
    listen     22;
    proxy_pass gitlab_servers;
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.