如何在values.yaml中为NGINX Ingress配置重定向URL列表?
在Kubernetes NGINX Ingress的values.yaml中实现批量URL重定向
实现思路
借助NGINX Ingress的官方注解,通过NGINX的map指令定义重定向映射(对应IIS里的rewriteMap),再搭配重定向规则,就能在values.yaml里批量配置旧URL到新URL的跳转,完全不用直接修改NGINX的配置文件。
修改后的values.yaml完整配置
ingress: enabled: true annotations: ingress.kubernetes.io/rewrite-target: / # 在NGINX的http块中定义重定向映射表 nginx.ingress.kubernetes.io/http-snippet: | map $request_uri $new_uri { default ""; # 按格式添加旧URL->新URL的映射,按需扩展 "/old-blog-post-1" "/new-blog/category/post-1"; "/vanity-url-for-seo" "/product/featured-item"; "/deprecated-page" "/"; "/old-about" "/about-us"; } # 在location块中添加重定向执行逻辑 nginx.ingress.kubernetes.io/configuration-snippet: | # 匹配到映射表中的旧URL时,执行永久重定向 if ($new_uri != "") { return 301 https://www.my-domain.com$new_uri; } # 保留原有的非www转www规则 if ($host = 'my-domain.com') { rewrite ^ https://www.$host$request_uri permanent; } nginx.ingress.kubernetes.io/from-to-www-redirect: "true" hosts: - host: www.my-domain.com paths: - path: / pathType: ImplementationSpecific - host: my-domain.com paths: - path: / pathType: ImplementationSpecific tls: - hosts: - www.my-domain.com secretName: production-tls - hosts: - my-domain.com secretName: production-without-www-tls
要点说明
- map指令的正确位置:NGINX要求
map指令必须在http块级别定义,所以用http-snippet注解来添加映射表,避免配置报错。 - 映射表规则:
default ""表示没有匹配到旧URL时,变量$new_uri为空;每一行"旧URL" "新URL";对应一条重定向规则,和IIS的rewriteMap用法逻辑完全一致。 - 重定向逻辑:通过
if ($new_uri != "")判断,只要匹配到映射表中的旧URL,就返回301永久重定向(适合SEO场景,传递权重),并且统一跳转到www域名,和现有规则保持一致。 - 扩展性:后续新增或修改重定向,只需要在
http-snippet的map块里添加/修改条目即可,维护起来非常方便。
内容的提问来源于stack exchange,提问作者awj
相关产品推荐
相关产品推荐

