• 使用 Nginx 代理内网 GitLab 并确保 SSH / HTTP 克隆地址正确


    背景

    公司有一个公网 IP 被分配或者映射到了某台内网的 CentOS 虚拟机上面,在这台机器上面安装 Nginx,实现了内网服务的域名解析等功能,提供外部访问能力。这可能是大多小公司的目前办公室内部的网络结构。

    而 GitLab 直接安装的运行建议则是理想中的状态,也就是那台机器本身具有公网 IP 地址,域名可以直接解析到上面。

    直接 nginx 反向代理用户是可以直接使用的,但是 ssh 克隆和 HTTP 克隆在页面上显示的地址可能会是内网 IP 地址,这样会导致:

    当使用域名登录页面,在线浏览某个文件的时候,可能会跳转到 IP 地址的页面去,导致登录失效,甚至无法打开。

    配置方法

    GitLab 安装完成后自己是有 Nginx 的,也是因为其存在,导致代理容易出问题,所以需要修改配置:

    1. 修改配置文件 gitlab.yml:

    vim /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
    
    # 修改内容如下
    gitlab:
      host: git.baidu.com
      port: 443
      https: true
    
      ssh_host: git.baidu.com

    我这里使用的是 HTTPS 的,所以端口使用 443 并开启了 https,配置 ssh 地址。

    2. 修改配置文件 gitlab.rb:

    vim /etc/gitlab/gitlab.rb
    
    # 配置域名地址
    external_url 'https://git.baidu.com'
    
    # 配置 ssh 地址
    gitlab_rails['gitlab_ssh_host'] = 'git.baidu.com'
    
    # Nginx 授信地址
    gitlab_rails['trusted_proxies'] = ['192.168.0.10']
    
    # SSH 端口
    gitlab_rails['gitlab_shell_ssh_port'] = 10022
    
    # 服务监听方式
    gitlab_workhorse['listen_network'] = "tcp"
    
    # 服务监听地址
    gitlab_workhorse['listen_addr'] = "0.0.0.0:10080"
    
    # 禁用自带的 nginx
    nginx['enable'] = false

    修改这些配置之后达到的效果:

    gitlab 自带的 nginx 关闭了,换成了监听 tcp 10080 端口,这样就能使用前置 nginx 反向代理该端口。

    配置了域名地址和 ssh 地址,端口,这样页面上的克隆地址就会是这里配置的地址,ssh 端口使用 10022 是到时候 nginx 上面会使用的端口,gitlab 本身还是 22 的 ssh 端口。

    3. 配置完成后重启 gitlab:

    gitlab-ctl reconfigure
    gitlab-ctl restart

    4. 配置作为代理的 nginx:

    http 反向代理配置,用于 http 克隆和 web 访问:

    server {
        listen      443 ssl;
        server_name git.baidu.com;
    
        ssl_certificate      cert/git.baidu.com.pem;
        ssl_certificate_key  cert/git.baidu.com.key;
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
    
        location / {
            proxy_redirect http:// https://;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-Ssl on;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://192.168.0.20:10080;
        }
    }

    注意,反向代理一定需要配置:proxy_set_header X-Forwarded-Ssl on; 否则会出现登录 422 的问题!

    tcp 反向代理,用于 ssh 克隆:

    upstream GITLAB {
        hash   $remote_addr consistent;
        server 192.168.0.20:22;
    }
    
    server {
        listen  10022;
        proxy_connect_timeout   30s;
        proxy_timeout   300s;
        proxy_pass  GITLAB;
    }

    注意 TCP 代理配置在 nginx 中和 HTTP 代理配置的位置不一样,如果不明白可以看之前的 Nginx 文章关于 TCP 端口代理。

    到此,整个配置就完成!

  • 相关阅读:
    springboot中多端口启动(这里也适用于https既443端口)
    Gson的fromJson()方法(从Json相关对象到Java实体或转换成List集合)
    [C++] STL源码中学到的 Traits 编程技法的应用
    【解决问题】UNIAPP、VUE 中DATA 数组更新后页面不同步动态渲染更新
    selenium操作chrome时的一些配置
    在react项目中使用fetch 和 JWT进行权限验证(转)
    滚动条的设置(样式包括宽度,颜色等)zhuan
    css3 box-shadow阴影(外阴影与外发光)图示讲解(zhuan)
    js 截断字符串 超过几个字加...
    create-react-app 打包部署
  • 原文地址:https://www.cnblogs.com/Dy1an/p/14275590.html
Copyright © 2020-2023  润新知