删除 gitlab 地址中的双斜杠

删除 gitlab 地址中的双斜杠

我在我的个人服务器上设置了 gitlab,并使用这个答案这个答案(以及来自使其与我的 Apache 安装兼容。一切正常,当我访问 gitlab.example.com 时,我可以看到 gitlab UI,可以创建帐户等等。但是,当我检查我转发到的 URI 时,它

https://gitlab.example.com//users/sign_in(请注意域名后面的两个斜杠)。这其实不是问题,但我想知道为什么会出现这种情况以及如何修复它 - 尤其是当我从地址中删除其中一个斜杠时,它仍然正常工作。(所以https://gitlab.example.com/users/sign_in完全一样)。

事实上,我被转发了两次:

  • GET https://gitlab.example.com=>301 Moved PermanentlyLocation:https://gitlab.example.com/
  • GET https://gitlab.example.com/=>302 FoundLocation:https://gitlab.example.com//users/sign_in

这是我的 apache 配置文件(`/etc/apache2/sites-enabled/gitlab.conf):

<IfModule mod_ssl.c>
<VirtualHost *:443>
        ServerName gitlab.example.com
        ServerSignature Off

        ProxyPreserveHost On

        ProxyPassMatch ^(/[^/]+\.(html|png|ico|css|txt))$ !
        ProxyPass /assets !

        <Location />
                Order deny,allow
                Allow from all

                ProxyPassReverse http://127.0.0.1:8080
                ProxyPassReverse http://gitlab.example.com
        </Location>

        RewriteEngine on
        RewriteCond %{DOCUMENT_ROOT}/%(REQUEST_FILENAME} !-f
        RewriteRule .* http://127.0.0.1:8080%{REQUEST_URI} [P,QSA]

        DocumentRoot /opt/gitlab/embedded/service/gitlab-rails/public

        SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
        Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>

这是 gitlab 的问题吗?我该如何解决?

笔记:我完全不确定哪个模块导致了转发行为,如果您需要任何其他配置文件,请告诉我。

答案1

你可能想尝试/代理通行证目标 URL 即更改

 ProxyPassReverse http://127.0.0.1:8080

进入

 ProxyPassReverse http://127.0.0.1:8080/

因为您将这些指令应用于也以尾部斜杠/(或在本例中仅以斜杠<Location />:)结尾的路径,正如手册警告的那样:

如果第一个参数以尾随 / 结尾,则第二个参数也应以尾随 / 结尾,反之亦然。否则,对后端的最终请求可能会遗漏一些必要的斜杠,并且无法提供预期的结果。

相关内容