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

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;
    }

转载于:https://my.oschina.net/lxrm/blog/630457

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值