美文网首页
Nginx 允许子域名通配符跨域

Nginx 允许子域名通配符跨域

作者: zzzmh | 来源:发表于2019-07-12 14:44 被阅读0次

需求

关于跨域报错的坑 No 'Access-Control-Allow-Origin' header 这段时间折腾了很久究竟是在Java配置还是在Nginx配置,Nginx又要如何配置,最终结论是,个别国内浏览器是真的血坑,要么Chrome内核版本低的可怕,要么莫名其妙referer丢失。
总之是Nginx更适合用于防盗链和通配符跨域。
直接上配置

配置

直接上配置文件

server {
    listen    443  ssl http2;
    server_name    xxx.xxx.com;
    
    ...
    # 兼容旧浏览器内核
    ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";

    location / {
        # referer防盗链开启 非本域名请求 返回403
        # 这里 none 和 blocked 是允许为空 用于兼容某些ZZ浏览器referer会丢失的情况
        valid_referers none blocked xxx.com *.xxx.com;
        if ($invalid_referer) {
            return 403;
        }
        
        # 跨域配置 其中options最好和其他方法分开 直接返回204
        # 这里允许的header需要逐一配置,个别ZZ浏览器会不兼容通配符,未配置的header会丢失
        # options请求不转给后端,直接返回204
        if ($request_method = OPTIONS) {
            add_header Access-Control-Allow-Origin $http_origin;
            add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
            add_header Access-Control-Allow-Credentials true;
            add_header Access-Control-Allow-Headers DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type;
            add_header Access-Control-Max-Age 1728000;
            return 204;
        }
        # 这里通过正则判断请求是否是来自xxx.com
        if ($http_origin ~ xxx\.com) {
            add_header Access-Control-Allow-Origin $http_origin;
            add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
            add_header Access-Control-Allow-Credentials true;
            add_header Access-Control-Allow-Headers DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type;
            add_header Access-Control-Max-Age 1728000;
        }
        
        ...
        
    }
}

END

本文同时也会发布在我的个人博客
https://zzzmh.cn/single?id=72

相关文章

  • Nginx 允许子域名通配符跨域

    需求 关于跨域报错的坑 No 'Access-Control-Allow-Origin' header 这段时间折...

  • Nginx 允许多个域名跨域访问

    参考: Nginx 允许多个域名跨域访问 当浏览器发起ajax请求到其他域名时,会出现跨域的问题,在nginx上的...

  • Nodejs 设置跨域

    设置允许所有域名跨域: 设置允许指定域名“http://www.tefang.cn”跨域: 设置允许多个域名跨域:...

  • Node.js如何设置允许跨域

    设置允许所有域名跨域: 设置允许指定域名“http://www.zhangpeiyue.com”跨域: 设置允许多...

  • 记录Nginx反向代理常用配置

    Nginx 代理 websocket 关键配置 Nginx 代理 https关键配置 子域名泛代理关键配置 允许跨...

  • 什么是通配符SSL证书 通配符SSL证书哪家便宜

    通配符SSL证书可通过在单个证书上保护您的域和无限子域名。通配符证书的工作方式与常规SSL证书相同,允许您保护网站...

  • 解决跨域问题

    产生跨域的情况 同一域名,不同端口 同一域名,不同协议 域名和域名对应ip 主域相同,子域不同(www 为子域名 ...

  • 前端跨域问题

    协议,域名,端口。有一项不同就会产生跨域。 解决跨域 1,jsonp 2, nodejs中间件 3,nginx代理...

  • ajax跨域请求(SpringMVC)

    什么是跨域 不同协议 不同域名 不同子域 不同端口 均为跨域特别的:一个域名和其对应的ip地址也算跨域具体见下表 ...

  • 跨域的原理 & Router(路由)

    产生跨域的原因:因为aja有同源策略,即只能允许同端口,同域名,同协议什么 情况下会产生跨域:不同端口,不同域名,...

网友评论

      本文标题:Nginx 允许子域名通配符跨域

      本文链接:https://www.haomeiwen.com/subject/wvgekctx.html