跨域API请求Nginx配置修复外贸站点

前言:你的外贸站点API请求被浏览器阻止了吗?

运营外贸站点时,前端H5页面常常需要调用不同域名下的后端API(比如 api.yoursite.com 调用 order.foreign.com)。
如果浏览器控制台出现“Access-Control-Allow-Origin”相关的报错,说明跨域请求被拦截了。
本文会从零开始,教你用Nginx配置CORS(跨域资源共享)头,让外贸站点的API通信恢复正常。
即使你不会写代码,跟着下面的步骤也能自己搞定。

准备条件:确认你的环境

在操作前,请确保满足以下几点:

  • 你拥有外贸站点服务器的 SSH登录权限宝塔面板等可视化管理工具
  • Nginx已经安装并正常运行(通过 nginx -v 可查看版本)。
  • 你清楚需要跨域的 来源域名(即前端页面所在的域名)和 目标API域名(接口所在域名)。
  • 准备好一个文本编辑器(如vim、nano),或直接在宝塔的文件管理里编辑nginx配置。

如果你的服务器还没装Nginx,
先执行 sudo apt install nginx(Debian/Ubuntu)或 sudo yum install nginx(CentOS/RHEL),
并启动:sudo systemctl start nginx

核心步骤:在Nginx配置文件中添加CORS头

1. 找到需要配置的站点配置文件

Nginx的站点配置文件通常位于 /etc/nginx/sites-available/(或 /etc/nginx/conf.d/)下,文件名一般是你的站点域名。
用SSH连接服务器后,输入:

sudo nano /etc/nginx/sites-available/yourdomain.com

如果用宝塔面板,直接在“网站”列表中找到站点,点击“设置” -> “配置文件”。

2. 定位到你需要跨域的 location 块

CORS配置一般要放在处理API请求的 location 里。
例如,你的API都托管在 api.yourdomain.comlocation /api/ 下,就找到类似这样的代码段:

location /api/ {
    proxy_pass http://127.0.0.1:8080;  # 后端服务地址
    # 其他配置
}

3. 插入CORS配置指令

在 location 块内添加以下几行(如果已存在类似配置则替换或合并):

location /api/ {
    proxy_pass http://127.0.0.1:8080;

    # 允许的源域名,可写具体域名或 * (生产不建议用*)
    add_header Access-Control-Allow-Origin "https://your-frontend-domain.com";
    # 当请求带自定义头时,浏览器会发OPTIONS预检请求,下面处理它
    add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
    add_header Access-Control-Allow-Headers "DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization";
    # 允许携带Cookie凭证(如果前端用withCredentials)
    add_header Access-Control-Allow-Credentials "true";

    # 处理预检请求(OPTIONS)
    if ($request_method = OPTIONS) {
        add_header Access-Control-Allow-Origin "https://your-frontend-domain.com";
        add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
        add_header Access-Control-Allow-Headers "$http_access_control_request_headers";
        add_header Access-Control-Max-Age 1728000;
        add_header Content-Length 0;
        add_header Content-Type text/plain;
        return 204;
    }
}

注意事项

  • Access-Control-Allow-Origin 一定要写成你前端页面的 精确域名(包括协议),如 https://www.myshop.com。如果前端有多个域名,可以用 $http_origin 动态判断,但为安全起见,不要直接写 * 并同时设置 Access-Control-Allow-Credentials: true
  • Access-Control-Allow-Methods 根据你的API实际使用的方法调整(如 PUT、DELETE)。
  • Access-Control-Allow-Headers 需要包含前端请求中携带的所有自定义头。常见的有 Content-TypeAuthorization

4. 测试配置文件并重载Nginx

# 检查语法
sudo nginx -t

# 如果返回 syntax is ok,则重载
sudo systemctl reload nginx

如果在宝塔面板,点击“保存”后,会自动重载Nginx。

避坑指南:90%新手会踩的坑

坑1:预检请求(OPTIONS)返回 405 或 403

很多后端没有单独处理 OPTIONS 请求,导致跨域失败。
上面的配置用 if ($request_method = OPTIONS) 强制返回204,绕过后端逻辑。

坑2:Access-Control-Allow-Origin 写成了 * 且同时设置了 Access-Control-Allow-Credentials: true

浏览器会拒绝这种组合。
要么去掉 Access-Control-Allow-Credentials,要么将 * 改为具体域名。

坑3:配置生效后浏览器仍然报跨域错误

  • 清空浏览器缓存或开启无痕模式重新测试。
  • 检查Nginx重载是否成功:ps aux | grep nginx 查看进程。
  • 用curl模拟请求:
  curl -H "Origin: https://your-frontend-domain.com" -H "Access-Control-Request-Method: GET" -X OPTIONS -v https://api.yourdomain.com/api/xxx

如果返回头里没有 Access-Control-Allow-Origin,说明配置未正确加载。

坑4:外贸站点使用了CDN或WAF

如果API域名启用了Cloudflare等CDN,Nginx配置可能被边缘节点覆盖。
你需要在CDN控制台也添加CORS相关头,或者CDN透传origin头。

效果验证:用浏览器确认问题已修复

  1. 打开外贸站点的前端页面。
  2. 按F12打开开发者工具,切换到 Network 标签。
  3. 刷新页面,找到调用API的请求(一般是XHR类型)。
  4. 点击该请求,在 Response Headers 中查看是否存在 Access-Control-Allow-Origin: https://你的前端域名
  5. 同时确认控制台的Console区域不再有红色CORS报错。

如果你的前端使用了 fetchaxios 并且设置了 credentials:
'include'

还需要确认 Access-Control-Allow-Credentials:
true
已返回,
并且 Access-Control-Allow-Origin 不是通配符。

扩展补充
如果仍然失败,
可以临时在Nginx配置中开启调试日志( error_log /var/log/nginx/error.log debug; ),
重启后查看日志定位具体拒绝原因。

总结

跨域问题是外贸站点前后端分离架构下的常见痛点,通过Nginx简单配置CORS头即可解决。
关键点在于:

  • 明确你的前端域名,不要使用 *credentials 混用。
  • 务必单独处理OPTIONS预检请求。
  • 修改配置后记得 nginx -t 并重载。

如果你在配置过程中遇到其他报错(比如 502、504),通常是后端服务未启动或代理地址错误,请先检查 proxy_pass 指向的目标是否可用。
希望本文能帮你快速修复外贸站点的跨域API请求问题。

分享到:
上一篇
数据库连接数耗尽站点卡顿优化方案
下一篇
容器资源配额限制防止进程抢占内存
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意