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

icnyk63a  于 2023-10-17  发布在  Nginx
关注(0)|答案(3)|浏览(217)

我的Nginx服务器充当Gitlab服务器的代理,问题是当我尝试“**git clone [[email protected]](https://stackoverflow.com/cdn-cgi/l/email-protection) :username/project.git**“时,我无法克隆项目[它不是从Nginx服务器到Gitlab服务器的隧道]
当我用Gitlab服务器的IP地址更新我本地系统的/etc/hosts文件时,它可以在没有密码的情况下正常克隆[我在Gitlab上用SSH公钥更新了我的配置文件]。
所以我得出的结论是,我必须更新我的Nginx配置,使用规则可以通过Nginx服务器将SSH通信从任何客户端系统隧道传输到Gitlab服务器。
已尝试在此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

wrrgggsh

wrrgggsh1#

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

在使规则工作并测试它们之后,您可能希望运行保存命令。然后,当您的服务器重新启动时,您保存的规则将自动加载。

bvk5enib

bvk5enib2#

Nginx代理用于HTTP请求。
通过SSH克隆时,您不使用http。
你需要做的是在路由器上使用端口转发或在服务器上使用iptables。

rbpvctlc

rbpvctlc3#

如果你以前没有使用过iptables,我不建议你修改它的规则。插件ssh systemctl restart sshd
1.例如,将SSH端口更改为22000。您可以通过编辑reverse_proxy主机上的/etc/ssh/sshd_config文件来完成此操作。
1.修改/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;
  }
}

相关问题