Azure应用网关配置Access-Control-Allow-Origin多源重写咨询
如何通过Azure应用网关配置多源Access-Control-Allow-Origin响应头(避免使用*)
完全可以实现这个需求,借助Azure应用网关的重写规则结合正则匹配,既能精准限定允许的CORS源列表,又能动态将匹配的请求Origin设为Access-Control-Allow-Origin响应头的值,非允许来源直接拒绝。
核心实现逻辑
- 提取请求头中的
Origin字段值 - 用正则表达式匹配预定义的允许源列表,匹配成功则返回该
Origin作为响应头值 - 匹配失败则直接返回403拒绝请求
具体配置步骤
1. 生成允许源的正则表达式
将你的允许源列表转换为正则(注意转义域名中的.,因为正则里.是通配符):
允许列表:
https://site1.example.com, https://site2.example.com, https://funkyChicken.farm.com
对应的正则:
^https://(site1\.example\.com|site2\.example\.com|funkyChicken\.farm\.com)$
如果需要支持带端口的源,可调整为:
^https://(site1\.example\.com|site2\.example\.com|funkyChicken\.farm\.com)(:\d+)?$
2. 配置Azure应用网关的重写规则集
- 进入Azure应用网关的重写规则面板,创建新的规则集
- 添加第一条规则(优先级设为1,确保先执行匹配逻辑):
- 条件配置:
- 条件类型选择「请求头」,头名称填
Origin - 匹配类型选择「正则表达式」,输入上面生成的正则
- 勾选「如果匹配则继续」
- 条件类型选择「请求头」,头名称填
- 操作配置:
- 操作类型选择「设置响应头」
- 头名称填
Access-Control-Allow-Origin - 头值选择「动态值」,选择
{http_origin}(即提取的请求Origin值)
- 条件配置:
3. 配置非允许来源的拦截规则
添加第二条规则(优先级设为2,仅当第一条规则不匹配时执行):
- 条件配置:
- 条件类型选择「请求头」,头名称填
Origin - 匹配类型选择「不匹配正则表达式」,输入同一个允许源正则
- 条件类型选择「请求头」,头名称填
- 操作配置:
- 操作类型选择「设置状态码」,状态码设为
403 Forbidden - 可选:添加自定义响应头说明原因,比如
X-CORS-Error: Origin not allowed
- 操作类型选择「设置状态码」,状态码设为
额外注意事项
- 确保应用网关的路由规则已正确指向你的后端API,重写规则会在路由转发后生效
- 对于OPTIONS预检请求,还需补充配置
Access-Control-Allow-Methods、Access-Control-Allow-Headers等CORS相关头,同样可通过重写规则添加 - 测试时需用不同Origin的请求验证:允许的源应返回对应Origin的响应头,非允许源返回403
内容的提问来源于stack exchange,提问作者user3067684
相关产品推荐
相关产品推荐

