Nginx Ingress路径配置异常:静态资源请求未指向/test路径
解决Ingress /test路径下静态资源从根目录加载的问题
这个问题的核心是:你的Ingress把/test路径转发到后端服务的根路径,但前端页面里的静态资源用了绝对路径(比如/css/main.css、/js/app.js),浏览器会直接从域名根目录发起请求,而不是/test子路径,导致资源加载异常。
以下是几种可行的解决方法:
方法一:修改应用的基础路径(推荐)
从根源上解决问题,让应用生成的资源链接自动带上/test前缀:
- 前端框架(Vue/React/Angular):
- Vue:在
vue.config.js中设置publicPath: '/test/' - React:在
package.json中添加"homepage": "/test" - Angular:在
angular.json里配置projects.xxx.architect.build.options.baseHref: "/test/"
重新构建部署后,所有静态资源引用都会自动加上/test前缀。
- Vue:在
- 后端渲染应用(如Spring Boot):
在配置文件中设置上下文路径,比如server.servlet.context-path=/test,这样后端生成的页面链接会自动带上/test前缀。
方法二:通过Ingress配置替换页面中的资源路径
如果无法修改应用代码,可以利用Nginx Ingress的sub_filter指令,自动替换HTML里的绝对路径引用:
修改Ingress的configuration-snippet注释块,新增3行替换规则:
nginx.ingress.kubernetes.io/configuration-snippet: | add_header X-Content-Type-Options off; more_set_headers "Strict-Transport-Security: max-age=31536000;" add_header Cache-Control "no-store"; add_header Pragma "no-cache"; add_header X-Frame-Options "deny"; add_header X-Content-Type-Options "nosniff"; # 新增:替换静态资源的根路径引用 sub_filter 'href="/' 'href="/test/'; sub_filter 'src="/' 'src="/test/'; sub_filter_once off;
完整修改后的Ingress配置:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: test-frontend-ingress namespace: test annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/ssl-redirect: "true" nginx.ingress.kubernetes.io/use-regex: "true" nginx.ingress.kubernetes.io/rewrite-target: /$2 nginx.org/server-snippet: "proxy_ssl_verify off;" nginx.ingress.kubernetes.io/configuration-snippet: | add_header X-Content-Type-Options off; more_set_headers "Strict-Transport-Security: max-age=31536000;" add_header Cache-Control "no-store"; add_header Pragma "no-cache"; add_header X-Frame-Options "deny"; add_header X-Content-Type-Options "nosniff"; # 替换静态资源路径 sub_filter 'href="/' 'href="/test/'; sub_filter 'src="/' 'src="/test/'; sub_filter_once off; spec: ingressClassName: nginx rules: - http: paths: - path: /test(/|$)(.*) pathType: ImplementationSpecific backend: service: name: test-frontend-service port: number: 80
说明:
sub_filter会匹配HTML中的href="/和src="/,替换为href="/test/和src="/test/sub_filter_once off确保所有匹配项都被替换,而非仅第一个
方法三:检查资源引用路径是否为相对路径
如果应用中的静态资源用的是相对路径(比如css/main.css而非/css/main.css),浏览器会自动从当前页面的路径(/test/)下去请求资源,无需额外配置。如果可以调整代码,优先使用相对路径。
内容的提问来源于stack exchange,提问作者Jonty
相关产品推荐
相关产品推荐

