宝塔nginx配置SSH反代访问gitlab

in 云服务器 with 0 comment

我们有两台服务器在同一局域网内,一台安装有gitlab,Ip为10.x.x.x,另一台我们安装了宝塔,配置了nginx,我们配置好了web的反代,但是gitlab的ssh端口,30022,要如何反代呢?

配置nginx.conf反代


🔍 确认一下配置生效

1. 确认域名解析正确性


dig +short git.xxx.com

# 或

nslookup git.xxx.com

2. 检查反向代理服务器的端口监听

在宝塔服务器执行:


ss -tulnp | grep 30022

# 或

netstat -tulnp | grep 30022

预期应看到 nginx 进程监听 30022 端口:


tcp  LISTEN 0      4096    0.0.0.0:30022      0.0.0.0:*     users:(("nginx",pid=xxx,fd=xxx))

3. 验证反向代理服务器的防火墙


  # 查看防火墙规则(CentOS)

  firewall-cmd --list-ports

  # 或 Ubuntu

  ufw status

  确保 30022/tcp 已放行。

  - 登录云控制台,检查宝塔服务器的安全组规则,确保入方向允许 30022 端口。


4. 检查 Nginx 配置加载


  grep -r "listen 30022" /www/server/panel/vhost/nginx/

  nginx -t && nginx -s reload

5. 分析 Nginx 的 TCP 日志

检查配置的 TCP 日志文件:


tail -f /www/wwwlogs/tcp-{access,error}.log

  - 连接记录(access.log 中的 $upstream_addr 是否指向 10.x.x.x:30022)。

  - 错误信息(如连接超时、拒绝等)。


6. 测试从反向代理服务器到 GitLab 的连通性

在宝塔服务器执行:


telnet 10.x.x.x 30022

# 或

nc -zv 10.x.x.x 30022

7. 确认 GitLab 的 SSH 配置

在 GitLab 服务器检查:


# 查看 GitLab SSH 服务状态

gitlab-ctl status gitlab-sshd

# 检查端口监听

ss -tulnp | grep 30022

  gitlab-ctl restart

⚠️ 常见问题解决

场景 1:Nginx 未监听 30022 端口

  1. 停止占用端口的服务。

  2. 在 Nginx 主配置中明确添加 stream 块(宝塔面板的"配置修改"直接编辑 nginx.conf)。

  3. 重启 Nginx。

场景 2:防火墙拦截

场景 3:GitLab 绑定地址错误


  gitlab_sshd['listen'] = '0.0.0.0'

  gitlab_sshd['port'] = 30022

  运行 gitlab-ctl reconfigure 并重启。


📝 最终验证命令


# 从外部机器测试 SSH 连接

ssh -p 30022 -v [email protected]

# 观察详细输出,定位握手失败环节
Responses