GitLab手动配置HTTPS
默认情况下,Omnibus GitLab不使用HTTPS,今天说下怎么给GitLab添加SSL支持。
比如为域名“gitlab.example.com”启用HTTPS
在external_url中编辑/etc/gitlab/gitlab.rb
# note the 'https' belowexternal_url "https://gitlab.example.com"
创建/etc/gitlab/ssl目录,然后在其中复制密钥和证书:
sudo mkdir -p /etc/gitlab/ssl sudo chmod 755 /etc/gitlab/ssl sudo cp gitlab.example.com.key gitlab.example.com.crt /etc/gitlab/ssl/
由于本例中的主机名是gitlab.example.com,因此Omnibus GitLab将查找分别称为
/etc/gitlab/ssl/gitlab.example.com.key
和的私钥和公共证书文件
/etc/gitlab/ssl/gitlab.example.com.crt
确保使用完整的证书链,以防止客户端连接时出现SSL错误。完整的证书链顺序应首先包含服务器证书,然后是所有中间证书,最后是根CA。
如果certificate.key文件受密码保护,则当您重新配置GitLab时,NGINX不会要求输入密码。在这种情况下,Omnibus GitLab将无任何提示地静默失败。要从密钥中删除密码,请运行:
openssl rsa -in certificate_before.key -out certificate_after.key
现在,重新配置GitLab:
sudo gitlab-ctl reconfigure
重新配置完成后,您的GitLab实例应位于处https://gitlab.example.com
如果使用防火墙,则可能必须打开端口443才能允许入站HTTPS通信。
# UFW example (Debian, Ubuntu) sudo ufw allow https # lokkit example (RedHat, CentOS 6) sudo lokkit -s https # firewall-cmd (RedHat, Centos 7) sudo firewall-cmd --permanent --add-service=https sudo systemctl reload firewalld
将HTTP请求重定向到HTTPS
默认情况下,当您指定以'https'开头的external_url时,NGINX将不再侦听端口80上的未加密HTTP通信。如果要将所有HTTP通信重定向到HTTPS,则可以使用该redirect_http_to_https 设置。
external_url "https://gitlab.example.com" nginx['redirect_http_to_https'] = true
更改默认端口和SSL证书位置
如果您需要使用默认端口(443)以外的HTTPS端口,只需将其指定为external_url的一部分即可。
external_url "https://gitlab.example.com:2443"
要设置ssl证书创建/etc/gitlab/ssl目录的位置,请将.crt和.key文件放在目录中并指定以下配置:
# For GitLab nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab.example.com.crt" nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab.example.com.key"
运行
sudo gitlab-ctl reconfigure
以使更改生效。
更新SSL证书
如果您的SSL证书的内容已更新,但尚未对进行任何配置更改gitlab.rb,则gitlab-ctl reconfigure不会影响NGINX。而是运行
sudo gitlab-ctl hup nginx
以使NGINX适当地 重新加载现有配置和新证书 。
更改默认代理标头
默认情况下,当您指定external_urlOmnibus GitLab时,将设置一些NGINX代理标头,这些标头在大多数环境中被认为是健全的。
例如,Omnibus GitLab将设置:
"X-Forwarded-Proto" => "https", "X-Forwarded-Ssl" => "on"
如果您在中指定了https架构,则为external_url。
但是,如果您的GitLab处于更复杂的设置中,例如在反向代理后面,则需要调整代理标头,以避免诸如The change you wanted was rejected或的 错误Can't verify CSRF token authenticity Completed 422 Unprocessable。
这可以通过覆盖默认标头来实现。在指定/etc/gitlab/gitlab.rb:
nginx['proxy_set_headers'] = { "X-Forwarded-Proto" => "http", "CUSTOM_HEADER" => "VALUE" }
保存文件并重新配置GitLab, 以使更改生效。
这样,您可以指定所需的NGINX支持的任何标头。
官方QQ群号码:922069959(空)、1093596563(空)