文档章节

CORS其实很简单:NGINX 一招搞定针对特定域名和端口跨域,动态决定跨域到哪里

NILYANG
 NILYANG
发布于 2016/03/03 16:23
字数 516
阅读 278
收藏 6

1. 需求来由

很多前端筒子老想着跨域,这可不是什么特别的事情,可是要支持不暴露我要支持的跨域域名这就有难度了? 嘿嘿嘿,可以想想,只有访问的时候我才说,额,你是可以跨域的!于是乎这份动态跨域的配置就出路咯!! 思路: 正则匹配到来源,然后根据来源决定跨啥域。当然,正则决定了你要给谁跨。 废话不多说,看代码。

可能有筒子问题,为啥不用联合条件,我要说,nginx不兹磁~~~orZ

当然,下面的设置仅允许GET跨,你还可以设置各种METHOD条件, have fun :-)

2. 干货

2.1 本地调试内网测试环境

1.支持开发 : 正文使用了正则1: ^(http:\/\/(?:(?:(foo|bar).fuck.com|\d+\.\d+\.\d+\.\d+)(?:[:]\d+)?))?\/.*$

主要解决内网中前端筒子用ip+port调试本地代码访问内网测试环境api的问题,同时也兼容内网测试环境域名访问。

看,我对前端筒子不要太好~~

2.2 线上环境

^(http:\/\/(?:(?:(foo|bar).fuck.com|123.123.123.123)))?\/.*$

该表达式则指明了至此特定域名和ip,但不带端口号(线上带个端口别扭不?)

好了好了,看了这么多,我知道你要脱裤子了,我来帮你 :P

3. 代码

   # serve  配置片段
    set $flag 0;
    set $ref_host '';
    set $ref_url '';
    if ($http_referer ~ ^(http:\/\/(?:(?:(foo|bar).fuck.com|\d+\.\d+\.\d+\.\d+)(?:[:]\d+)?))?\/.*$) {
        set $ref_host $2;
        set $ref_url  $1;
        set $flag 1;
    }
    set $flag_uri 0;
    if ($uri = /fuck_some_url.php) {
        set $flag_uri 1;
    }

    if ($flag = 1) {
        set $flag_uri 2;
    }

    if ( $flag_uri = 2) {
        add_header Access-Control-Allow-Credentials true;
        add_header Access-Control-Allow-Methods GET;
        add_header Access-Control-Allow-Origin $ref_url;
    }

© 著作权归作者所有

NILYANG
粉丝 14
博文 100
码字总数 19038
作品 0
杭州
高级程序员
私信 提问
Nginx跨域访问问题总结

一、什么是跨域 简单地理解就是因为JavaScript同源策略的限制,a.com 域名下的js无法操作b.com或是c.a.com域名下的对象。 同源是指相同的协议、域名、端口。特别注意两点: 如果是协议和端口...

南非蚂蚁
2017/05/23
0
0
前端中的同源策略与三种跨域资源共享方法

同源策略 什么是同源 在了解跨域这个概念之前首先要知道的是何为同源策略。所谓的同源是一种安全机制,为了预防某些恶意行为(例如 Cookie 窃取等),浏览器限制了从同一个源加载的文档或脚本...

Gwokhov
03/25
0
0
详解跨域(最全的解决方案)

image.png 1. 什么是跨域 跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript实施的安全限制。 同源策略限制了一下行为: Cookie、LocalStorage ...

极客教程
2017/12/13
0
0
九种跨域方式实现原理(完整版)

前言 前后端数据交互经常会碰到请求跨域,什么是跨域,以及有哪几种跨域方式,这是本文要探讨的内容。 本文完整的源代码请猛戳github博客 一、什么是跨域? 1.什么是同源策略及其限制内容? ...

浪里行舟
01/25
0
0
关于浏览器跨域问题Access-Control-Allow-Origin

其实很早就接触过前端开发 也处理过跨域问题(当时采用的是jsonp server+client 都要改动。。。。) 现在这段时间也在做这块 记录+整理 跨域问题是什么gui? 一个网站的网址组成包括协议名,...

FRED丶DON
2015/09/20
2.2K
2

没有更多内容

加载失败,请刷新页面

加载更多

JS--function

一、声明提前(hoist) 在js程序开始执行前,引擎会查找所有var声明的变量和function声明的函数,集中到当前作用域顶部集中创建,赋值留在原地 二、三种创建函数的方式 1、声明方式创建函数-...

wytao1995
今天
4
0
微服务之间调用控制器注解类型的差异

今天在一个业务服务通过Feign调用文件服务上传文件时遇到了几个问题: 1. 提示http请求头过大的问题; 此时需要修改bootstrap.yml,加入 server: max-http-header-size: 10000000 用以放大...

不再熬夜
今天
6
0
用 4G 工作是什么体验

七月开始,因为工作原因,在公司附近租了个住处,方便工作。离公司近了,感觉就是不一样,之前每天 5:30 就要起床赶地铁,现在可以睡到自然醒,一看才 7 点,悠闲的起床洗漱,踱步到公司,都...

zzxworld
今天
6
0
sonar报错volatile

问题发生 原先代码如下: //认证授权码private static volatile String AUTHORIZATION_CODE = "init"; git push 之后,sonar认为这是个bug检测报告截图如下: 分析排查 解释说明: Markin...

开源小菜鸟2333
今天
5
0
《Java实践指南》--读后

闲读《Java实践指南》... 1.lvy 某些项目中能够看到ivy.xml。早期使用ant的项目中,常常用ivy.xml来下载项目依赖。 2.ant 作为java程序员,应该都知道ant,虽然可能用过的人不多。为什么ant...

RippleChan
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部