You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HAProxy反向代理下GitLab的HTTPS与SSH共存配置问题

解决HAProxy反向代理GitLab时HTTPS与SSH共存问题

GitLab的HTTPS和SSH服务依赖不同端口(默认443和22),HAProxy需要针对这两种流量分别做TCP层转发配置——HTTPS可选择SSL终止或纯透传,SSH本身是加密协议,直接做TCP转发即可。以下是具体配置和验证步骤:

1. 修改HAProxy配置

编辑HAProxy主配置文件(通常为/etc/haproxy/haproxy.cfg),新增SSH流量转发规则,同时保留原有HTTPS配置。

新增SSH转发规则

# 监听服务器22端口,处理SSH流量
frontend gitlab_ssh
    bind *:22
    mode tcp
    option tcplog
    default_backend gitlab_ssh_backend

# 将SSH流量转发到GitLab服务器的SSH端口(默认22,若GitLab改了端口需同步修改)
backend gitlab_ssh_backend
    mode tcp
    option tcplog
    server gitlab_ssh_node <你的GitLab服务器IP>:22 check inter 5s rise 2 fall 3

保留HTTPS转发配置(示例)

如果HAProxy做SSL终止(即HAProxy处理HTTPS加密,转发HTTP到GitLab),原有配置保持不变即可:

frontend gitlab_https
    bind *:443 ssl crt /path/to/your/ssl_cert.pem
    mode http
    option httplog
    default_backend gitlab_https_backend

backend gitlab_https_backend
    mode http
    server gitlab_http_node <你的GitLab服务器IP>:80 check inter 5s rise 2 fall 3

若HAProxy仅做HTTPS流量透传(不终止SSL),则HTTPS的frontend和backend也要改为mode tcp,配置类似SSH规则,监听443端口转发到GitLab的443端口。

修改后重启HAProxy生效:

sudo systemctl restart haproxy

2. 确认GitLab的SSH配置

检查GitLab的SSH服务端口与HAProxy转发端口一致:

  1. 编辑GitLab配置文件/etc/gitlab/gitlab.rb,确认以下配置(默认22,修改过需同步HAProxy的backend端口):
    gitlab_rails['gitlab_shell_ssh_port'] = 22
    
  2. 重新加载GitLab配置:
    sudo gitlab-ctl reconfigure
    
  3. 确认SSH服务正常运行:
    sudo gitlab-ctl status sshd
    

3. 放行防火墙端口

确保HAProxy服务器的22和443端口被防火墙允许:

  • 对于ufw防火墙:
    sudo ufw allow 22/tcp
    sudo ufw allow 443/tcp
    sudo ufw reload
    
  • 对于firewalld防火墙:
    sudo firewall-cmd --add-port=22/tcp --permanent
    sudo firewall-cmd --add-port=443/tcp --permanent
    sudo firewall-cmd --reload
    

4. 测试验证

  • 测试SSH连通性:执行ssh git@<HAProxy服务器IP>,能进入GitLab的SSH交互界面则转发正常。
  • 测试Git SSH操作:尝试克隆或推送代码,比如git clone git@<HAProxy服务器IP>:username/repo.git,验证流程顺畅。
  • 验证HTTPS服务:保持原有HTTPS方式的代码提交/克隆操作,确认功能不受影响。

常见问题排查

  • SSH连接超时:检查HAProxy是否正常监听22端口(netstat -tulpn | grep haproxy),以及GitLab服务器的22端口是否能被HAProxy访问。
  • SSH连接被拒绝:检查HAProxy的backend服务器IP和端口是否正确,GitLab的sshd服务是否正常运行。
  • 权限错误:确认用户已在GitLab中添加正确的SSH公钥,且git用户在GitLab服务器上的权限正常。

内容的提问来源于stack exchange,提问作者Dswiter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 21:00:20