我的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
答案 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。