GitLab API下载嵌套目录文件返回404,反向代理配置求助
问题根因
你遇到的多级目录文件API请求404问题,是Apache反向代理的重复转发规则冲突、URL编码处理逻辑错误两个核心原因导致:GitLab API请求嵌套路径时会携带编码后的斜杠%2F,错误的配置会导致该字符被解码/转发逻辑混乱,GitLab无法识别正确路径返回404。
具体调整建议
- 删掉
<Location />块内重复的域名代理配置,仅保留本地端口的转发规则,重复的ProxyPass会导致转发逻辑冲突 - 删除整段Rewrite规则(包含RewriteEngine、RewriteCond、RewriteRule三行):该规则与Location块的ProxyPass功能重复,且Rewrite的P标志默认会解码URL特殊字符,直接破坏GitLab API的嵌套路径格式
- 修正请求头拼写错误:
X-Forwared-Ssl拼写错误漏了一个d,改为X-Forwarded-Ssl,避免GitLab识别请求协议异常 - 保留现有
AllowEncodedSlashes NoDecode和ProxyPass后的nocanon参数,这两个是GitLab反向代理必须的配置,用于禁止Apache解码URL中的编码斜杠,保留原始请求路径传递给GitLab
调整后完整配置参考
<VirtualHost *:443> SSLEngine on SSLProtocol all -SSLv2 SSLHonorCipherOrder on SSLCipherSuite "ECDH+AESGCM:DH+AESGM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS" Header add Strict-Transport-Security: "max-age=15768000;includeSubdomains" SSLCompression Off SSLCertificateFile /etc/apache2/ssl.crt/gitlabserver.crt SSLCertificateKeyFile /etc/apache2/ssl.key/gitlabserver.key ServerName gitlabserver.local ServerSignature Off ProxyRequests Off ProxyPreserveHost On AllowEncodedSlashes NoDecode <Location /> Require all granted ProxyPass http://127.0.0.1:8181/ nocanon ProxyPassReverse http://127.0.0.1:8181/ </Location> RequestHeader set X_FORWARDED_PROTO 'https' RequestHeader set X-Forwarded-Ssl on DocumentRoot /opt/gitlab/embedded/service/gitlab-rails/public ErrorDocument 404 /404.html ErrorDocument 422 /422.html ErrorDocument 500 /500.html ErrorDocument 502 /502.html ErrorDocument 503 /503.html LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b" common_forwarded ErrorLog /var/log/apache2/gitlabserver_error.log CustomLog /var/log/apache2/gitlabserver_forwarded.log common_forwarded CustomLog /var/log/apache2/gitlabserver_access.log combined env=!dontlog CustomLog /var/log/apache2/gitlabserver.log combined </VirtualHost>
配置修改完成后重启Apache服务即可生效。
内容的提问来源于stack exchange,提问作者Juwani
相关产品推荐
相关产品推荐

