nginx跨域怎么用(如何利用map实现Nginx允许多个域名跨域)
类别:服务器 浏览量:1957
时间:2022-01-27 01:04:55 nginx跨域怎么用
如何利用map实现Nginx允许多个域名跨域常见的 Nginx 配置允许跨域
server { listen 11111; server_name localhost; location ~ /xxx/xx { if ($request_method = 'OPTIONS') { return 204; } add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS'; add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization'; proxy_pass http://1.2.3.4:5678; } }
指定 Access-Control-Allow-Origin 为 ‘*' ,即为最简单暴力的允许所有访问跨域
允许 Cookie
有些场景下需要使用 Cookie,这时 Nginx 需要加一句 add_header Access-Control-Allow-Credentials 'true';,但此时会发现浏览器报错,说该参数为 true 时,allow origin 不能设置为 ‘*‘,如果手动指定了多个域名,那同样会被浏览器提示错误,说 allow origin 不能设置多个,这些是协议层面的限制
使用 map
在 Nginx 中可以使用 map 得到一个自定义变量,简单的使用可以参考官方文档,在上面提到的场景中,可以对请求中的 origin 做一个过滤处理,把符合要求的请求域名放到一个变量中,在设置 allow origin 时使用该变量就能实现一个动态的、多个的允许跨域域名
一个示例配置如下:
map $http_origin $allow_origin { default ""; "~^(https?://localhost(:[0-9]+)?)" $1; "~^(https?://127.0.0.1(:[0-9]+)?)" $1; "~^(https?://172.10(.[\d]+){2}(:[0-9]+)?)" $1; "~^(https?://192.168(.[\d]+){2}(:[0-9]+)?)" $1; } server { listen 11111; server_name localhost; location ~ /xxx/xx { if ($request_method = 'OPTIONS') { return 204; } add_header Access-Control-Allow-Origin $allow_origin; add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS'; add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization'; add_header Access-Control-Allow-Credentials 'true'; proxy_pass http://1.2.3.4:5678; } }
解释说明:
$http_origin 是 Nginx 的内部变量,用于获取请求头中的 origin
$allow_origin 是可以自定义的变量名
总结
到此这篇关于如何利用map实现Nginx允许多个域名跨域的文章就介绍到这了,更多相关map实现Nginx允许多个域名跨域内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
您可能感兴趣
- reactmap给了key仍然提示错误(react为什么不推荐使用index作为key)
- nginx跨域怎么用(如何利用map实现Nginx允许多个域名跨域)
- dede软件标签(发掘dede自带的google sitemap功能)
- python线程安全队列(Python 限制线程的最大数量的方法Semaphore)
- 织梦仿站流程图解(织梦sitemap地图实时推送给百度的教程)
- MongoDB的MapReduce的用法
- django查找路径(Django Sitemap 站点地图的实现方法)
- dedecms如何更改主页模板(织梦dedecms sitemap路径修改方法)
- ecmascript解析(ECMAScript6中Map映射的基本概念与常用方法)
- asp.net中Server.MapPath的使用
- sqoop导出参数(sqoop export导出 map100% reduce0% 卡住的多种原因及解决)
- mongodb中mapreduce实例
- phpredis存储对象(PHP使用redis位图bitMap 实现签到功能)
- xm文档使用教程(xmapp环境搭建注意事项说明)
- pythonlambda是什么函数(Python之lambda匿名函数及map和filter的用法)
- sql中的map函数用法(Mapper sql语句字段和实体类属性名字有什么关系)
- NVIDIA显卡份额冲上88 A饭发愁 游戏优化恐没A卡份了(NVIDIA显卡份额冲上88A饭发愁)
- AMD YES A卡还是N卡 A卡和N卡的区别(AMDYESA卡还是N卡)
- 以后显卡多了一个新选择,N卡和A卡外又多了个I卡(以后显卡多了一个新选择)
- 读卖乐园的彩灯(读卖乐园的彩灯)
- 新疆80后在淘宝卖干果 以前是 不务正业 如今帮乡亲致富(新疆80后在淘宝卖干果)
- 弄清楚了销 售 买 卖这四个字,母婴生意做起来就没那么难了(弄清楚了销售买)
热门推荐
- ASP.NET实现FTP上传文件
- mysql创建用户并给用户授权(MySQL 主从复制中创建复制用户的时机探讨)
- python数字形式转换详解(Python3.5实现的罗马数字转换成整数功能示例)
- 宝塔面板搭建软件(宝塔面板堡塔云控平台增加CPU监控图文教程)
- python数据分析pandas教程(11个Python Pandas小技巧让你的工作更高效附代码实例)
- pythondict排序原理(Python标准库使用OrderedDict类的实例讲解)
- docker部署mysql如何访问(完美解决docker安装mysql后Navicat连接不上的问题)
- django用户权限管理(Django 内置权限扩展案例详解)
- python自带的ide的使用(基于python的ini配置文件操作工具类)
- laravel 模型(Laravel 模型关联基础教程详解)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9