【发布时间】:2018-09-27 10:11:44
【问题描述】:
当前配置
我将 GitLab 迁移到了新服务器。作为迁移的一部分,一些存储库进行了重组。我们有一个网站直接链接到 GitLab 上的 raw 和 blob 文件。对于这些 raw 和 blob 文件,我想将所有 HTTPS 请求从旧 URL 重定向到新 URL。
我使用 Gitlab Omnibus 包,附带捆绑的 nginx 安装。我基于对这个问题的公认答案:Gitlab Omnibus: how to redirect all requests to another domain,这又是指官方 GitLab 文档:https://docs.gitlab.com/omnibus/settings/nginx.html#inserting-custom-settings-into-the-nginx-config。
-
创建 nginx 配置目录,因为它还不存在:
sudo mkdir -p /etc/nginx/conf.d/ 创建
/etc/nginx/conf.d/redirect.conf:
.
server {
server_name gitlab.itextsupport.com;
rewrite ^\/itext7\/samples\/(blob|raw)\/master\/(?!samples\/)(.*)$ https://$server_name/itext7/samples/$1/master/samples/$2 permanent;
}
-
编辑
/etc/gitlab/gitlab.rb的配置文件,添加以下行:nginx['custom_nginx_config'] = "include /etc/nginx/conf.d/redirect.conf;" -
重写nginx配置:
sudo gitlab-ctl reconfigure -
重启捆绑的nginx:
sudo gitlab-ctl restart nginx -
验证捆绑的 nginx 是否包含重定向文件:
sudo grep 'redirect.conf' /var/opt/gitlab/nginx/conf/nginx.conf
测试配置
curl -I https://gitlab.itextsupport.com/itext/tutorial/blob/master/signatures/src/main/java/signatures/chapter4/C4_05_SignWithBEID.java
预期结果
/samples 在/blob/master 之后插入。我希望看到 https://gitlab.itextsupport.com/itext/tutorial/blob/master/samples/signatures/src/main/java/signatures/chapter4/C4_05_SignWithBEID.java 的 301 重写
实际结果
200 OK 在未修改的 URL 上。
丑陋的黑客
将此行添加到/var/opt/gitlab/nginx/conf/gitlab-http.conf 并重新启动捆绑的nginx:
rewrite ^\/itext7\/samples\/(blob|raw)\/master\/(?!samples\/)(.*)$ https://$server_name/itext7/samples/$1/master/samples/$2 permanent;
通过这种方式,我已经验证了我的实际重写规则本身是正确的。
缺点:每次运行gitlab-ctl reconfigure 都会丢失此行。
问题
我需要进行哪些更改才能使 URL 重写按预期工作?没有丑陋的黑客?
其他信息
当我运行sudo /opt/gitlab/embedded/sbin/nginx -p /var/opt/gitlab/nginx -T 时,我看到两个server { } 块。到目前为止,我的工作理论是 nginx 只拾取第一个服务器块,而忽略第二个。如果我能找到一种方法以与配置文件/etc/gitlab/gitlab.rb 兼容的方式合并两个服务器块,那么我的问题很可能会得到解决。
【问题讨论】:
标签: redirect nginx gitlab gitlab-omnibus