Redirect Gitlab Omnibus:如何使用捆绑的nginx重写URL 当前配置

Redirect Gitlab Omnibus:如何使用捆绑的nginx重写URL 当前配置,redirect,nginx,gitlab,gitlab-omnibus,Redirect,Nginx,Gitlab,Gitlab Omnibus,我将GitLab迁移到了一个新服务器。作为迁移的一部分,一些存储库被重新组织。我们有一个网站可以直接链接到GitLab上的原始和blob文件。对于这些原始和blob文件,我想将所有HTTPS请求从旧URL重定向到新URL 我使用Gitlab Omnibus包,并附带nginx安装。我基于对这个问题的公认答案:,这反过来又引用了官方的GitLab文档: 创建nginx config目录,因为它还不存在: sudo mkdir-p/etc/nginx/conf.d/ 创建/etc/nginx/con

我将GitLab迁移到了一个新服务器。作为迁移的一部分,一些存储库被重新组织。我们有一个网站可以直接链接到GitLab上的原始和blob文件。对于这些原始和blob文件,我想将所有HTTPS请求从旧URL重定向到新URL

我使用Gitlab Omnibus包,并附带nginx安装。我基于对这个问题的公认答案:,这反过来又引用了官方的GitLab文档:

  • 创建nginx config目录,因为它还不存在:

    sudo mkdir-p/etc/nginx/conf.d/

  • 创建
    /etc/nginx/conf.d/redirect.conf

  • 编辑
    /etc/gitlab/gitlab.rb上的配置文件,添加以下行:

    nginx['custom\u nginx\u config']=“include/etc/nginx/conf.d/redirect.conf;”“

  • 重写nginx配置:

    sudo gitlab ctl重新配置

  • 重新启动捆绑的nginx:

    rewrite ^\/itext7\/samples\/(blob|raw)\/master\/(?!samples\/)(.*)$ https://$server_name/itext7/samples/$1/master/samples/$2 permanent;
    
    sudo gitlab ctl重启nginx

  • 验证捆绑的nginx是否包含重定向文件:

    sudo grep'redirect.conf'/var/opt/gitlab/nginx/conf/nginx.conf

  • 测试配置 预期结果
    /samples
    /blob/master
    之后插入。我希望看到301重写成
    https://gitlab.itextsupport.com/itext/tutorial/blob/master/samples/signatures/src/main/java/signatures/chapter4/C4_05_SignWithBEID.java

    实际结果 在未修改的URL上200 OK

    丑陋的黑客 将此行添加到
    /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只接收第一个服务器块,而忽略第二个服务器块。如果我能找到一种方法来合并这两个服务器块,以一种与配置文件兼容的方式,那么我的问题很可能就解决了。

    好吧,看起来答案就在
    gitlab.rb
    中盯着我看。在
    nginx['custom\u nginx\u config']
    上方的一行是
    nginx['custom\u gitlab\u server\u config']
    。我将include语句放在那里,并删除了重写规则周围的
    server{}
    括号。GitLab文档中也介绍了这一点,网址为:

    这会将定义的字符串插入
    /var/opt/gitlab/nginx/conf/gitlab http.conf
    的服务器块末尾

    这就是我所做的:

  • /etc/gitlab/gitlab.rb
    中,注释掉
    nginx['custom\u nginx\u config']
    行并添加:

    nginx['custom\u gitlab\u server\u config']=“include/etc/nginx/conf.d/redirect.conf;”

  • /etc/nginx/conf.d/redirect.conf
    中,仅保留重写行:

    rewrite^\/itext7\/samples\/(blob|raw)\/master\/(?!samples\/)(.*)$https://$server\u name/itext7/samples/$1/master/samples/$2永久

  • 重新配置GitLab:

    sudo gitlab ctl重新配置

  • 重新启动nginx:

    sudo gitlab ctl重启nginx

  • 验证nginx配置:

    sudo/opt/gitlab/embedded/sbin/nginx-p/var/opt/gitlab/nginx-T | tail-n20

  • 验证URL重写:

    curl-Ihttps://gitlab.itextsupport.com/itext/tutorial/blob/master/signatures/src/main/java/signatures/chapter4/C4_05_SignWithBEID.java


  • 有一件事我仍然很好奇:

    • rewrite
      行结束于
      server{}
      块之外
    • rewrite
      行使用
      $server\u name
      变量
    • $server\u name
      变量在
      server{}
      块中定义
    这是因为
    nginx-T
    以奇怪的方式显示包含的语句造成的视觉混乱吗?
    rewrite
    行是否确实在
    server{}
    块内,即使它看起来在块外?为什么事情往往不像看上去的那样,为什么GitLab文档是用一种封闭的语言编写的?唉,这些思考可能永远没有答案

    rewrite ^\/itext7\/samples\/(blob|raw)\/master\/(?!samples\/)(.*)$ https://$server_name/itext7/samples/$1/master/samples/$2 permanent;
    
    nginx: the configuration file /var/opt/gitlab/nginx/conf/nginx.conf syntax is ok
    nginx: configuration file /var/opt/gitlab/nginx/conf/nginx.conf test is successful
    
      include /etc/nginx/conf.d/redirect.conf;
    }
    
    # configuration file /etc/nginx/conf.d/redirect.conf:
    rewrite ^\/itext7\/samples\/(blob|raw)\/master\/(?!samples\/)(.*)$ https://$server_name/itext7/samples/$1/master/samples/$2 permanent;
    
    # configuration file /var/opt/gitlab/nginx/conf/nginx-status.conf:
    server  {
        listen 127.0.0.1:8060;
        server_name localhost;
        location /nginx_status {
          stub_status on;
          server_tokens off;
          access_log off;
          allow 127.0.0.1;
          deny all;
        }
    }
    
    HTTP/1.1 301 Moved Permanently
    Server: nginx
    Date: Thu, 27 Sep 2018 11:32:23 GMT
    Content-Type: text/html
    Content-Length: 178
    Connection: keep-alive
    Location: https://gitlab.itextsupport.com/itext/tutorial/blob/master/samples/signatures/src/main/java/signatures/chapter4/C4_05_SignWithBEID.java
    Strict-Transport-Security: max-age=31536000