NGINX Ingress自定义URI路由后端服务异常:Wiki服务404问题
自定义URI路由后端服务的解决方案
可以通过自定义URI路由到不同后端服务,你的场景完全可行,问题出在MediaWiki的重定向逻辑与Ingress路径处理的不匹配上。
问题分析
当前Ingress配置中,/wiki前缀流量已路由至mediawiki-svc,但MediaWiki内部生成重定向URL时:
- 丢失了
/wiki路径前缀,导致重定向到/index.php/Main_Page而非/wiki/index.php/Main_Page - 错误地将HTTPS协议转为HTTP,进一步导致路径识别异常,最终触发404
修复步骤
1. 调整Ingress配置(以Nginx Ingress为例)
通过添加路径重写和代理头配置,让后端服务正确识别外部访问的协议与路径前缀:
- host: myhost.com http: paths: - backend: service: name: mediawiki-svc port: number: 80 path: /wiki(/|$)(.*) pathType: ImplementationSpecific annotations: nginx.ingress.kubernetes.io/rewrite-target: /$2 nginx.ingress.kubernetes.io/ssl-redirect: "true" nginx.ingress.kubernetes.io/proxy-set-header: "X-Forwarded-Proto $scheme" nginx.ingress.kubernetes.io/proxy-set-header: "X-Forwarded-Host $host" nginx.ingress.kubernetes.io/proxy-set-header: "X-Forwarded-Prefix /wiki" - backend: service: name: plex-svc port: number: 32400 path: / pathType: Prefix
rewrite-target:将/wiki/xxx格式的请求重写为/xxx传给MediaWiki后端X-Forwarded-*头:让MediaWiki获取外部访问的真实协议(HTTPS)、主机名和路径前缀ssl-redirect:强制HTTP请求重定向到HTTPS
2. 修改MediaWiki配置(LocalSettings.php)
在MediaWiki的配置文件中添加以下参数,确保生成的链接和重定向包含正确的前缀与协议:
$wgServer = "https://myhost.com/wiki"; $wgScriptPath = ""; $wgArticlePath = "/$1"; $wgUsePathInfo = true; // 信任Ingress的代理头(根据实际环境调整IP范围) $wgTrustedProxies = ['0.0.0.0/0']; $wgForwardedProtocolHeaders = ['X-Forwarded-Proto'];
3. 验证配置
- 应用更新后的Ingress配置:
kubectl apply -f your-ingress.yaml - 重启MediaWiki服务:
kubectl rollout restart deployment mediawiki-deployment - 访问
https://myhost.com/wiki,此时重定向URL会变为https://myhost.com/wiki/index.php/Main_Page,可正常加载页面
Plex服务正常是因为其Ingress路径为/,与内部路径完全匹配,且Plex能正确识别代理头,因此重定向逻辑无异常。
内容的提问来源于stack exchange,提问作者GreNIX
相关产品推荐
相关产品推荐

