如何在Nginx Unit层面配置CORS 实现传统Nginx的跨域处理逻辑
Nginx Unit 实现对应CORS逻辑的配置方法
你原来在传统Nginx中写的CORS预检请求处理逻辑,可以直接在Nginx Unit的路由规则中实现,配置完全对齐原有逻辑,具体方案如下:
核心配置思路
Nginx Unit不需要写if判断,直接通过路由的method匹配规则筛选OPTIONS预检请求,然后配置对应响应头、返回204状态码即可,普通业务请求也可以按需追加CORS响应头。
完整配置示例
{ "listeners": { "*:80": { "pass": "routes" } }, "routes": [ // 处理CORS预检OPTIONS请求 { "match": { "method": "OPTIONS" }, "action": { "return": 204, "headers": { "Access-Control-Allow-Origin": "*", "Access-Control-Allow-Methods": "GET, POST, PUT, OPTIONS, DELETE, PATCH", "Access-Control-Allow-Headers": "Authorization,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range", "Access-Control-Expose-Headers": "Gc-Export-Errors" } } }, // 普通业务请求路由,按需添加CORS头 { "action": { "pass": "applications/你的业务应用名称", "headers": { "Access-Control-Allow-Origin": "*", "Access-Control-Expose-Headers": "Gc-Export-Errors" } } } ], "applications": { "你的业务应用名称": { // 此处保留你原有业务应用的配置即可,无需改动 } } }
配置生效方式
将修改后的配置保存为json文件,调用Unit控制API更新配置即可,参考命令:
curl -X PUT -d @./unit-config.json --unix-socket /run/control.unit.sock http://localhost/config/
注意事项
- 如果业务要求限制跨域来源,将
Access-Control-Allow-Origin的*替换为实际允许的域名即可 - 普通业务请求如果不需要额外追加CORS头,删除对应action中的headers配置即可
- 如果需要针对特定路径做CORS配置,可在match段添加uri匹配规则做精细化控制
内容的提问来源于stack exchange,提问作者Grisha
相关产品推荐
相关产品推荐

