You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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前缀。
  • 后端渲染应用(如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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 19:31:17