You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

同一VPS上前后端主域名与子域名跨域连接问题求助

同一VPS上前后端主域名与子域名跨域连接问题求助

看起来你碰到了典型的CORS跨域拦截问题,浏览器因为没检测到后端返回的Access-Control-Allow-Origin响应头,直接阻止了前端对后端接口的请求。我先帮你梳理下现有配置里的问题,再给出可行的修复方案:

你遇到的错误提示

Access to XMLHttpRequest at 'https://api.savoury.es/api/user/' from origin 'https://savoury.es' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

现有Nginx后端配置的问题点

从你贴出的配置片段来看,有两个关键问题导致了这个错误:

  1. 域名中的多余空格:你写的'https: // savoury .es'包含不必要的空格,浏览器会把这个识别为无效的源地址,等于没正确设置允许跨域的源。
  2. 未处理OPTIONS预检请求:对于PUT、DELETE这类非简单请求,浏览器会先发OPTIONS预检请求确认权限,但你的配置里没有专门处理这个请求的响应逻辑,导致预检失败,进而触发跨域拦截。

修复后的Nginx后端配置

把你的后端Nginx配置替换成下面的内容,注意去掉多余空格,补上OPTIONS请求的处理:

server {
    listen 80;
    server_name api.savoury.es;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl;
    server_name api.savoury.es;

    ssl_certificate /etc/letsencrypt/live/api.savoury.es/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/api.savoury.es/privkey.pem;

    # CORS 核心配置
    add_header 'Access-Control-Allow-Origin' 'https://savoury.es' always;
    add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE' always;
    add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization' always;

    # 专门处理 OPTIONS 预检请求,直接返回204无内容
    if ($request_method = OPTIONS) {
        return 204;
    }

    # 这里请补充你后端应用的代理转发配置,比如:
    # location / {
    #     proxy_pass http://localhost:你的后端服务端口;
    #     proxy_set_header Host $host;
    #     proxy_set_header X-Real-IP $remote_addr;
    # }
}

额外注意事项

  • 保留always参数:这样即使后端返回4xx/5xx错误状态码,CORS响应头也会被发送,避免错误场景下依然出现跨域问题。
  • 自定义请求头的处理:如果你的前端请求带有自定义头(比如Authorization令牌),一定要在Access-Control-Allow-Headers里添加对应的头名称。
  • 配置生效:修改完成后记得重启Nginx服务:sudo systemctl restart nginx,然后清除浏览器缓存再测试接口连接。

备注:内容来源于stack exchange,提问作者yeraki

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 14:58:18