最近在一个前后端分离项目中,接口服务并不是直接暴露给浏览器访问,而是通过 Nginx/OpenResty 作为统一入口进行反向代理。浏览器访问的是对外的 API 域名,请求先进入 Nginx/OpenResty,再由反向代理转发到内部后端服务。
在这个架构下配置跨域时,遇到了一个比较隐蔽的问题:同一个 API,在一个前端站点可以正常访问,换到另一个前端站点后却被浏览器拦截,提示 Access-Control-Allow-Origin 不匹配。表面上看像是某个来源域名没有被允许,实际根因是反向代理层和后端服务同时返回了 CORS 响应头,导致浏览器收到重复且冲突的跨域配置。
本文记录这次问题的排查过程、根因分析和最终处理方式,适用于 Nginx/OpenResty 反向代理后端接口时遇到的 CORS 异常。