nginx 配置导致跨域的问题分析

 更新时间:2026年07月08日 09:04:28   作者:线程A  
这篇文章主要介绍了nginx 配置导致跨域的问题分析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

问题复盘(脱敏版)

现象

访问前端页面 https://<your-domain>/datasets 时,静态资源能加载,但数据集列表 API 失败。浏览器 Network 里表现为跨域错误;排查过程中还短暂出现过 502。

根因:不是 CORS 中间件没配,而是 Origin 不一致

前端请求 API 时会拼接 NEXT_PUBLIC_API_PREFIX

  const urlPrefix = isPublicAPI ? PUBLIC_API_PREFIX : API_PREFIX
  let urlWithPrefix = (url.startsWith('http://') || url.startsWith('https://'))
    ? url
    : `${urlPrefix}${url.startsWith('/') ? url : `/${url}`}`

最初配置(有问题):

项目
页面https://<your-domain>/datasets
APIhttp://<your-domain>/vector/v2/collections/get-all

协议不同(https vs http),浏览器视为不同 Origin,即使域名相同也会跨域。

同时触发两个问题:

  1. Mixed Content:HTTPS 页面请求 HTTP 接口,浏览器会拦截
  2. CORS 预检:跨域 POST 需要服务端返回正确 CORS 头

所以控制台看起来像 CORS 问题,本质是 API 前缀协议和页面不一致

架构上本来不需要跨域

项目 Nginx 已做同域反代:

    location /vector {
      proxy_pass http://api:8000;
      include proxy.conf;
    }
    ...
    location / {
      proxy_pass http://web:3000;
      include proxy.conf;
    }

前端和 API 都在同一域名下,只要 API 走相对路径 /vector/...,就是同域请求,不需要 CORS。

排查过程

步骤操作结果
1发现 API 走 http://,页面走 https://确认跨域根因
2改成 NEXT_PUBLIC_API_PREFIX=https://<your-domain>协议一致,中间短暂 502(部署/后端 moment 不可用,与前缀逻辑无关)
3换成正确的 URL(最终方案)问题解决

502 是网关 moment 连不上 API 后端(重启、Pod 未 Ready 等),不是 URL 写法本身导致的。

最终方案

NEXT_PUBLIC_API_PREFIX 改成与页面 同协议、同域名 的地址(或留空走相对路径),并 重新构建 web 镜像NEXT_PUBLIC_* 在 build 时打进 JS,只改运行时 env 不 rebuild 可能仍用旧值)。

推荐配置:

NEXT_PUBLIC_API_PREFIX=
# 或
NEXT_PUBLIC_API_PREFIX=https://<your-domain>

关于 CORS 中间件

    app_.add_middleware(
        CORSMiddleware,
        allow_origins=["*"],
        allow_credentials=True,
        ...
    )

allow_origins=["*"] + allow_credentials=True 按规范不能同时使用。同域部署下 CORS 基本用不到;如果以后要跨域 + 带 Cookie,需要改成具体 Origin 列表。

经验总结

  1. 先对 Origin:跨域先看页面和 API 的 scheme/host/port 是否一致,不要先怀疑 CORS 中间件。
  2. 同域反代优先:Nginx 已反代 /vector 时,API 前缀留空最省事。
  3. NEXT_PUBLIC_* 必须 rebuild web,否则浏览器可能还在用旧 JS。
  4. 502 ≠ CORS:502 是网关到后端的问题,和跨域是两类问题。

一句话:页面是 HTTPS,API 前缀却配成了 HTTP,浏览器判定跨域并拦截;换成与页面对齐的 URL 后,请求变成同域,问题消失。

到此这篇关于nginx 配置导致跨域的问题分析的文章就介绍到这了,更多相关nginx 配置导致跨域内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • nginx配置防止慢速攻击的实现

    nginx配置防止慢速攻击的实现

    慢速攻击是一类用很少带宽就能长期占用服务器连接/资源的攻击方式,攻击者通过非常慢地发送请求头或请求体,或极慢地读取服务器响应,让每个连接都“挂着不结束”,从而耗尽 Web 服务器,下面就来具体介绍一下解决方法,感兴趣的可以了解一下
    2025-08-08
  • Nginx设置HttpOnly Secure SameSite参数解决Cookie信息丢失

    Nginx设置HttpOnly Secure SameSite参数解决Cookie信息丢失

    本文主要介绍了Nginx中Cookie缺少SameSite属性的问题,并详细解释了HttpOnly、Secure和SameSite属性的作用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-11-11
  • Nginx代理缓冲proxy_buffering配置方式

    Nginx代理缓冲proxy_buffering配置方式

    这篇文章主要介绍了Nginx代理缓冲proxy_buffering配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • FastDFS及Nginx整合实现代码解析

    FastDFS及Nginx整合实现代码解析

    这篇文章主要介绍了FastDFS及Nginx整合实现代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • 解析Nginx中的日志模块及日志基本的初始化和过滤配置

    解析Nginx中的日志模块及日志基本的初始化和过滤配置

    ngx_errlog_module是Nginx中用来管理日志的模块,解析Nginx中的日志模块及日志基本的初始化和过滤配置,需要的朋友可以参考下
    2016-07-07
  • Nginx服务器配置HTTPS nginx.config 配置文件(教程)

    Nginx服务器配置HTTPS nginx.config 配置文件(教程)

    下面小编就为大家分享一篇Nginx服务器配置HTTPS nginx.config 配置文件(教程),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • 详解Centos7 源码编译安装 Nginx1.13

    详解Centos7 源码编译安装 Nginx1.13

    这篇文章主要介绍了详解Centos7 源码编译安装 Nginx1.13,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • CentOS下编译安装nginx及配置缩略图插件的方法教程

    CentOS下编译安装nginx及配置缩略图插件的方法教程

    这篇文章主要给大家介绍了在CentOS系统下编译安装nginx及配置缩略图插件的方法教程,文中给出了详细的安装步骤,对大家具有一定的参考价值,有需要的朋友们下面来一起看看吧。
    2017-02-02
  • Nginx 应用范围和使用详解

    Nginx 应用范围和使用详解

    这篇文章主要介绍了Nginx 应用范围和使用详解的相关资料,需要的朋友可以参考下
    2017-03-03
  • 使用Nginx搭载rtmp直播服务器的方法

    使用Nginx搭载rtmp直播服务器的方法

    这次我们搭建一个rtmp直播服务器,用于电脑或手机直播推流到服务器,然后其他终端如电脑或手机可以观看直播的视频画面。接下来通过本文给大家分享使用Nginx搭载rtmp直播服务器的问题,感兴趣的朋友一起看看吧
    2021-10-10

最新评论