Git克隆通过Nginx代理为Gitlab服务器无法正常工作

时间:2016-08-12 14:14:08

标签: nginx gitlab reverse-proxy ssh-tunnel

我的Nginx服务器充当Gitlab服务器的代理,问题是当我尝试“**git clone git@gitlab.example.com:username/project.git**”我无法克隆项目时[它不是从Nginx服务器隧道传输到Gitlab服务器] < / p>

当我用Gitlab服务器的IP地址更新本地系统的/ etc / hosts文件时,它没有密码就克隆了[我在Gitlab上用SSH公钥更新了我的个人资料]。

所以我得出的结论是,我将使用可以通过Nginx Server将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

2 个答案:

答案 0 :(得分:2)

首先,您需要停止让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

您希望在规则生效后运行save命令,并且您已对其进行了测试。然后,当您的服务器重新启动时,您保存的规则将自动加载。

答案 1 :(得分:1)

Nginx代理用于http请求。

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

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