如何配置规则以仅当请求携带指定值头信息时才允许访问特定endpoint
Nginx Ingress 请求头访问限制实现方案
你可以通过Nginx Ingress提供的自定义配置注入能力,快速实现请求头校验逻辑,同时可灵活结合路径限制规则使用,具体操作如下:
1. 全路径请求头校验
如果需要对当前Ingress关联的所有路径生效,直接在Ingress资源的annotations中添加如下配置即可:
annotations: nginx.ingress.kubernetes.io/configuration-snippet: | # 可按需修改要校验的请求头、匹配规则、返回状态码 if ($http_x_allow_access != "your-expected-value") { return 403; }
说明:Nginx中请求头对应的变量固定以$http_为前缀,头名需全部小写,横杠替换为下划线,例如请求头X-Custom-Secret对应的变量为$http_x_custom_secret
2. 特定路径+请求头联合校验
如果仅需要对指定路径做请求头校验,可调整配置片段实现多条件联合判断:
annotations: nginx.ingress.kubernetes.io/configuration-snippet: | # 匹配需要限制的路径,可按需修改匹配规则 if ($request_uri ~ ^/api/private) { set $check_rule 1; } # 匹配不符合请求头要求的请求 if ($http_x_allow_access != "your-expected-value") { set $check_rule "${check_rule}1"; } # 同时满足两个条件时拒绝访问 if ($check_rule = "11") { return 403; }
常用自定义调整场景
- 仅拦截缺少指定请求头的请求:将请求头判断条件修改为
if ($http_x_custom_header = "") - 同时校验多个请求头:依次叠加对应的
set规则,最后匹配累加后的变量值即可 - 自定义拦截响应:将
return 403修改为你需要的状态码,也可搭配rewrite指令跳转自定义错误页
内容的提问来源于stack exchange,提问作者Kazim Okan Akgül
相关产品推荐
相关产品推荐

