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

Kubernetes中NGINX Ingress的$request_uri为何为空?

问题分析与解决

核心原因

你同时启用了nginx.ingress.kubernetes.io/from-to-www-redirect: 'true'和自定义的configuration-snippet规则,两者产生了冲突:

  • from-to-www-redirect是NGINX Ingress官方提供的专门用于非www到www重定向的注解,会自动生成包含路径、参数处理的完整重定向规则。
  • 自定义的snippet规则和官方注解生成的规则在NGINX配置中互相干扰,导致$request_uri在你的自定义规则上下文里未被正确填充,最终出现空值。

另外你的rewrite规则写法也有瑕疵:rewrite ^ https://www.$request_uri permanent;中的^仅匹配空路径,带路径的请求也无法被正确捕获,但这不是本次$request_uri为空的主因。

解决办法

方法一:使用官方注解(推荐)

直接移除自定义的configuration-snippet,仅保留官方注解即可,它会自动处理所有路径和参数的重定向:

annotations:
  ...
  nginx.ingress.kubernetes.io/from-to-www-redirect: 'true'

这个注解会自动生成包含$request_uri的正确重定向规则,无需手动编写。

方法二:自定义规则(关闭官方注解)

如果必须使用自定义规则,先关闭官方的from-to-www-redirect,然后修正重定向规则,确保路径和参数正确传递:

annotations:
  ...
  # 注释或删除官方重定向注解
  # nginx.ingress.kubernetes.io/from-to-www-redirect: 'true'
  nginx.ingress.kubernetes.io/configuration-snippet: |
    if ($host = 'example.com') {
      # 用正则捕获路径,确保完整跳转
      rewrite ^(.*)$ https://www.example.com$1 permanent;
      # 或者更高效严谨的写法(处理带参数的场景):
      # return 301 https://www.example.com$uri$is_args$args;
    }

使用return指令比rewrite更高效,推荐优先采用return 301的写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 04:05:05