You need to enable JavaScript to run this app. 如何配置Ingress Nginx使其仅为指定域名返回CORS跨域头
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Ingress Nginx使其仅为指定域名返回CORS跨域头

Nginx Ingress 仅指定域名开启CORS配置方案

配置失效原因

你之前的自定义规则不生效,核心是nginx.ingress.kubernetes.io/enable-cors: "true"这个注解会触发ingress-nginx的内置全局CORS逻辑,优先级高于你写的configuration-snippet条件判断,自动给所有请求加CORS头,导致你的域名过滤规则被覆盖。

正确配置方案

完全停用内置CORS自动配置,所有跨域逻辑通过configuration-snippet自定义实现,完整的Ingress注解如下:

# 注意:不要添加 nginx.ingress.kubernetes.io/enable-cors: "true" 注解
nginx.ingress.kubernetes.io/configuration-snippet: |
  # 匹配合法跨域源,多个允许的域名用|分隔,支持正则
  if ($http_origin ~* "^(https://example.com|https://app.test.com)$") {
    set $cors "true";
    more_set_headers "Access-Control-Allow-Origin: $http_origin";
    more_set_headers "Access-Control-Allow-Credentials: true";
    more_set_headers "Access-Control-Allow-Methods: GET, POST, PUT, DELETE, PATCH, OPTIONS";
    more_set_headers "Access-Control-Allow-Headers: DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization";
    more_set_headers "Access-Control-Max-Age: 1728000";
  }
  # 处理OPTIONS跨域预检请求
  if ($request_method = OPTIONS) {
    set $cors "${cors}options";
  }
  if ($cors = "trueoptions") {
    more_set_headers "Content-Length: 0";
    more_set_headers "Content-Type: text/plain; charset=utf-8";
    return 204;
  }

验证方法

分别用合法和非法Origin发起请求测试:

  1. 非法Origin测试:
curl 'https://your-service-domain.com' -H 'Origin: https://hacker.org' -v

响应头中不会出现Access-Control-Allow-Origin相关字段,符合预期。
2. 合法Origin测试:

curl 'https://your-service-domain.com' -H 'Origin: https://example.com' -v

响应头中会返回完整的CORS相关字段,符合预期。

内容的提问来源于stack exchange,提问作者Mohamed chiheb Ben jemaa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 14:24:02