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

AKS集群Nginx Ingress重写目标问题:无尾斜杠静态资源加载失败

问题分析
  1. 相对路径解析偏差:访问20.200.200.200/articles(无尾斜杠)时,浏览器会将页面内的./assets/xxx相对路径解析为/articles/assets/xxx;虽路径格式看似与/articles/(带尾斜杠)场景一致,但结合Ingress重写规则后,资源请求被错误转发。
  2. Ingress路径类型配置冲突:使用正则路径时,pathType: Prefix会导致Nginx Ingress Controller的匹配逻辑异常,需改用ImplementationSpecific适配正则匹配。
  3. 资源转发目标错误:/articles/assets/xxx被重写为/assets/xxx后,会被/(.*)规则捕获并转发到landing-page服务,返回HTML页面而非静态资源,引发语法错误。
解决方法

方法一:修复Ingress配置(推荐)

调整Ingress路径类型,添加自动重定向规则确保无尾斜杠请求跳转至带尾斜杠路径,同时新增静态资源专属转发规则,保证请求正确路由到articles服务:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: personal
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/use-regex: "true"
    nginx.ingress.kubernetes.io/rewrite-target: /$2
    # 自动将无尾斜杠的/articles重定向到/articles/
    nginx.ingress.kubernetes.io/configuration-snippet: |
      rewrite ^/articles$ /articles/ permanent;
spec:
  ingressClassName: nginx
  rules:
  - http:
      paths:
      # 修改pathType适配正则匹配
      - path: /articles(/|$)(.*)
        pathType: ImplementationSpecific
        backend:
          service:
            name: articles
            port:
              number: 80
      # 新增静态资源转发规则,优先级高于landing-page
      - path: /assets(/|$)(.*)
        pathType: ImplementationSpecific
        backend:
          service:
            name: articles
            port:
              number: 80
      - path: /(.*)
        pathType: ImplementationSpecific
        backend:
          service:
            name: landing-page
            port:
              number: 80

方法二:修改页面静态资源路径为绝对路径

将HTML中的相对路径改为以/开头的绝对路径,确保无论访问路径是否带尾斜杠,静态资源请求都指向正确路径:

修改index.html中的资源引用:

<link rel="stylesheet" href="/assets/css/main.css" />
<script src="/assets/js/jquery.min.js"></script>
<script src="/assets/js/browser.min.js"></script>
<script src="/assets/js/breakpoints.min.js"></script>
<script src="/assets/js/util.js"></script>
<script src="/assets/js/main.js"></script>

同时需在Ingress中添加方法一中的/assets(/|$)(.*)路径规则,保证/assets/xxx请求转发到articles服务。

方法三:调整Nginx容器配置(需修改镜像)

修改articles服务的Nginx配置文件default.conf,在容器内部处理无尾斜杠请求的重定向:

server {
    listen 80;
    server_name _;
    root /usr/share/nginx/html;
    index index.html;

    # 将根路径无尾斜杠请求重定向到带尾斜杠
    location = / {
        rewrite ^/$ / permanent;
    }

    location / {
        try_files $uri $uri/ =404;
    }
}

重新构建镜像并部署后,配合现有Ingress配置即可解决问题。


内容的提问来源于stack exchange,提问作者Victor BONNET

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 03:01:00