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

标签 nginx gitlab reverse-proxy ssh-tunnel

我的 Nginx 服务器充当 Gitlab 服务器的代理,问题是当我尝试“**git clone git@gitlab.example.com: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

最佳答案

首先,您需要停止让 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 命令。然后,当您的服务器重新启动时,您保存的规则将自动加载。

关于nginx - 通过 Nginx 代理为 Gitlab 服务器进行 Git 克隆不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38920146/

相关文章:

css - Senaite LIMS (Plone 4.3.18) css 无法在启用 https 的 Nginx 上工作

linux - 在不使用插件的情况下增加 Maven 版本

SSL:证书与名称不匹配 (Cloudflare)

apache - 对于在 Node.JS 上运行的 SaaS,是否需要 Web 服务器 (nginx) 或清漆作为反向代理?

nginx: [emerg] "server"指令在/etc/nginx/nginx.conf:98 中是不允许的

regex - 让 nginx 替换 css 样式表

php - .htaccess:如何保持相同的 URL,但在服务器上显示不同的页面

c - 一个 nginx worker 进程是同时处理两个请求还是一个一个处理?

linux - 在 ubuntu 服务器 17.04 上安装 gitlab-ce

Azure DevOps CICD gitlab 集成