首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

nginx多个域名跨域

基础概念

Nginx 是一个高性能的 HTTP 和反向代理服务器,也用作邮件代理服务器。跨域是指浏览器为了安全考虑,限制从一个源加载的文档或脚本如何与来自另一个源的资源进行交互。跨域问题通常发生在前端应用尝试访问不同域名下的后端服务时。

相关优势

  1. 高性能:Nginx 能够处理高并发请求,提供高效的负载均衡。
  2. 灵活性:通过配置文件,可以轻松实现复杂的路由规则和反向代理。
  3. 安全性:支持多种安全机制,如 SSL/TLS 加密、IP 过滤等。

类型

  1. 简单请求:包括 GET、POST、HEAD 等方法,浏览器会直接发送请求。
  2. 预检请求:对于复杂请求(如 PUT、DELETE 等),浏览器会先发送一个 OPTIONS 请求进行预检。

应用场景

  1. 前端开发:前端应用通常部署在不同的域名下,需要访问后端服务。
  2. API 网关:作为 API 网关,处理来自不同域名的请求并转发到相应的后端服务。

问题及解决方法

问题:Nginx 多个域名跨域配置

假设我们有两个域名 domain1.comdomain2.com,它们都需要访问 backend.com 的资源。

原因

浏览器的同源策略限制了不同域名之间的直接访问。

解决方法

在 Nginx 配置文件中添加跨域相关的头信息。以下是一个示例配置:

代码语言:txt
复制
server {
    listen 80;
    server_name domain1.com;

    location / {
        proxy_pass http://backend.com;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        # 跨域配置
        add_header 'Access-Control-Allow-Origin' 'http://domain1.com';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'Origin, Content-Type, Accept, Authorization';
        add_header 'Access-Control-Allow-Credentials' 'true';

        if ($request_method = 'OPTIONS') {
            add_header 'Access-Control-Max-Age' 1728000;
            add_header 'Content-Type' 'text/plain charset=UTF-8';
            add_header 'Content-Length' 0;
            return 204;
        }
    }
}

server {
    listen 80;
    server_name domain2.com;

    location / {
        proxy_pass http://backend.com;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        # 跨域配置
        add_header 'Access-Control-Allow-Origin' 'http://domain2.com';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'Origin, Content-Type, Accept, Authorization';
        add_header 'Access-Control-Allow-Credentials' 'true';

        if ($request_method = 'OPTIONS') {
            add_header 'Access-Control-Max-Age' 1728000;
            add_header 'Content-Type' 'text/plain charset=UTF-8';
            add_header 'Content-Length' 0;
            return 204;
        }
    }
}

解释

  1. add_header:添加跨域相关的头信息。
  2. Access-Control-Allow-Origin:允许访问的源。
  3. Access-Control-Allow-Methods:允许的 HTTP 方法。
  4. Access-Control-Allow-Headers:允许的请求头。
  5. Access-Control-Allow-Credentials:是否允许发送 Cookie。
  6. if ($request_method = 'OPTIONS'):处理预检请求,返回 204 No Content。

参考链接

通过以上配置,domain1.comdomain2.com 就可以顺利地访问 backend.com 的资源,解决了跨域问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • nginx处理

    最近从mac转成用window来开发,在安装nginx的时候碰了下钉子,那我就不开心了。...想着既然都安装好了,那么就搞点事情吧~ window上安装nginx 简单讲下在window上安装nginx~ 下载软件并安装 通过download下载你需要的版本,我这里下载了稳定版本nginx/Windows...启动:nginx 启动之后就可以在localhost:80访问你的项目了,前提是你的80端口没有被占用 停止 快速停止:nginx -s stop 优雅停止:nginx -s quit 重新加载:nginx...: 在任务管理器中手动移除nginx占用的进程 执行tasklist /fi "imagename eq nginx.exe"找出nginx占用的进程 映像名称...注意:有时候移除了占用的PID后还是不行,那重启下电脑~ 启动nginx后,在浏览器上输入localhost你会看到其成功启动的页面 问题 对于的概念就不详细说了...

    2.7K20

    nginx访问配置_cors访问不了

    概念 简单来说:两个url只要协议、域名、端口有任何一个不同,都被当作是不同的,相互访问就会有问题。...:在开发前后端完全分离的系统中,服务端代码属于一个工程,前端代码属于另一个工程,前端开发人员在进行接口对接时,可能会在webstorm等工具进行编码,并用webstorm的内置服务器进行调试,这就会有问题...,因为,webstorm内置服务器默认前缀部分是http://localhost:63342/,而服务端接口的路径前缀部分一定不会是这样,这样便产生了访问的问题。...$("text").html(JSON.stringify(text)) } }) 直接访问,打开浏览器的控制台查看,没错,提示的正是无法进行访问...这次的请求其实是走了nginx代理服务器的 总结 nginx的实际原理就是配置一个代理路径替换实际的访问路径,使得浏览器认为访问的资源都是属于相同协议,域名和端口的,而实际访问的并不是代理路径,而是通过代理路径找到实际路径进行访问

    4.5K40

    nginx问题纪录

    问题 之前在公司内部的一后台界面,所有的视频都无法播放,浏览器抓包,从报错信息看是问题导致,这里就简单纪录下 由于javascript的同源策略的限制问题,导致a.com域名下的js无法操作b.com...域名下的对象,所谓同源是指相同的协议,例如http或者https,若相同即为同源。...同源包括: 相同协议,相同域名,端口 常见类型 名词解释 CORS 资源共享,当前几乎所有的浏览器都可以通过资源共享的协议支持ajax调用,CORS 标准定义了一组新的 HTTP header...,这组 header 给浏览器和服务器提供了一种判断请求是否何法的依据。...表示是否允许发送Cookie,如果在CORS请求中不包含Cookie,则设为 true,否则删掉该字段 Access-Control-Allow-Headers 在访问时,XMLHttpRequest

    1.4K20

    nginx配置访问,无法生效_页面访问

    即会出现请求禁止。...通俗一点说就是如果存在协议、域名、端口或者子域名不同服务端,或一者为IP地址,一者为域名地址(在问题上,仅仅是通过”url的首部”来识别而不会去尝试判断相同的IP地址对应着两个或者两个是否同属同一个...IP),之中任意服务端旗下的客户端发起请求其它服务端资源的访问行动都是的,而浏览器为了安全问题一般都限制了访问,也就是不允许请求资源。...需要服务器设置header:Access-Control-Allow-Origin 4.Nginx反向代理 可以不需要目标服务器配合,不过需要Nginx中转服务器,用于转发请求(服务端之间的资源请求不会有限制...) Nginx访问解决方案 使用Ajax请求资源,Nginx作为代理,出现以下错误: The 'Access-Control-Allow-Origin' header contains multiple

    7.4K20

    CORSNginx反向代理优劣对比

    最近写了一些关于前后端分离项目之后,相关方案的基本原理和常见误区的帖子,主要包括CORS和Nginx反向代理。...Nginx反向代理:此时前端相当于不,和正常请求一致,无需额外配置。...Nginx反向代理:此时后端相当于不,和正常请求一致,无需额外配置。 服务器配置 CORS方案: 无。...Nginx反向代理:该方案工作都集中在nginx服务器上,配置如下 ... proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Real-Port...原理移步nginx反向代理基本配置与常见误区、nginx配置解析之客户端真实IP的传递 安全性 CORS方案: 由于此时浏览器会默认添加origin属性,服务端可以直接查到请求来源,便于控制来源、屏蔽黑名单链接

    2.6K20

    nginx+tomcat单个域名多个域名配置

    这类分布式的系统,一般也都会用到nginx来做负载均衡。...nginx做负载均衡的优势网上有很多介绍资料,这里我不再多做介绍。因为有很多系统要部署,涉及到域名、二级域名多个域名等的部署。...在实际的部署由于对nginx的不够熟悉,遇到过很多坑,其中这种多域名的配置,xxxx.com转发到www.xxxx.com、访问域名转发到tomcat里的项目等,现在先总结一部坑的解决办法。...的基本配置大致就是这样,如果绑定多个域名(不管是一级域名还是二级域名),需配置多个server,你会发现这几个server配置都差不多,主要是更改server_name及proxy_pass指向即可。...如果此时访问域名,你会发现nginx的配置生效了,只是目前显示的是tomcat的默认界面。nginx的配置基本就这样了,接下来对tomcat做些配置的修改。

    5.1K60

    nginx解决方案

    自有服务器 如果服务器是自己的,那么则可以修改web服务环境的配置文件操作如下: 配置nginx.conf配置文件的location / {}中添加以下内容 # 设置允许的源,这里使用通配符 * 表示接受任何源的请求...,也可以根据需要设置为具体的域名 add_header Access-Control-Allow-Origin '*' always; # 允许请求中携带Cookie信息 add_header Access-Control-Allow-Credentials...'true' always; # 指定允许请求的方法,包括GET、POST、OPTIONS和PUT add_header Access-Control-Allow-Methods 'GET, POST...此时,浏览器将以临时关闭同源策略的方式运行,允许请求。 注意 :这种方法仅适用于本地开发环境,不应在生产环境中禁用同源策略,因为它会降低浏览器的安全性。...在实际部署项目时,请务必在服务器端正确配置支持。

    3.1K10

    nginx+tomcat单个域名多个域名配置

    这类分布式的系统,一般也都会用到nginx来做负载均衡。...nginx做负载均衡的优势网上有很多介绍资料,这里我不再多做介绍。因为有很多系统要部署,涉及到域名、二级域名多个域名等的部署。...在实际的部署由于对nginx的不够熟悉,遇到过很多坑,其中这种多域名的配置,xxxx.com转发到www.xxxx.com、访问域名转发到tomcat里的项目等,现在先总结一部坑的解决办法。...的基本配置大致就是这样,如果绑定多个域名(不管是一级域名还是二级域名),需配置多个server,你会发现这几个server配置都差不多,主要是更改server_name及proxy_pass指向即可。...如果此时访问域名,你会发现nginx的配置生效了,只是目前显示的是tomcat的默认界面。nginx的配置基本就这样了,接下来对tomcat做些配置的修改。

    5.4K00

    使用nginx解决请求

    一遇到到下这种问题,大家是不是很头疼,没错,这就是问题,首先我们先说一下什么是?为什么会?什么问题造成的?...简单来说,就是浏览器url地址和访问数据接口的地址端口或域名不一致造成的。 只需要让前端页面和后端程序放到一块使用同一个域名和同一个端口即可解决,正好使用nginx可以解决此问题。...nginx下载地址:https://pan.baidu.com/s/1VbXmRPi_Sjna-jVacjMBFg 提取码: adsu 下载后解压打开,修改conf文件下的nginx.conf文件,找到...root C:/Users/tongyao/Desktop; error_page 405 =200 $uri; } 图中我把前端页面放到一个名为web的文件夹到桌面了, 然后保存,点击nginx...根目录的nginx.exe双击运行 然后通过任务管理器查看是否启动成功。

    1.7K20

    014.Nginx配置

    但若同一个公司内部存在多个不同的子,子之间需要互访,此时可通过进行实现。可通过JSONP和CORS进行实现。...(推荐) 配置多个域名在map中 只有配置过的允许: 1 map $http_origin $corsHost { 2 default 0; 3 "~https...4.3 多域名配置方法一 场景:允许来自source01.odocker.com和source02.odocker.com的应用,即允许多个域名访问corsmulti01.linuxds.com上的资源...4.5 多域名配置方法二 场景:允许来自localhostsource01.odocker.com或source02.odocker.com的应用,即允许多个域名访问corsmulti02.linuxds.com...4.7 多域名配置方法三 场景:允许来自*.odocker.com的应用,即允许多个域名访问corsmulti03.linuxds.com上的资源。

    6.3K40
    领券