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允许多个域名跨域内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
您可能感兴趣
- dedecms模板特点(在Dedecms下面生成Google Sitemap的方法)
- vue中的mapgetter优势(vuex 中辅助函数mapGetters的基本用法详解)
- phpredis存储对象(PHP使用redis位图bitMap 实现签到功能)
- MongoDB的MapReduce的用法
- dedecms如何更改主页模板(织梦dedecms sitemap路径修改方法)
- sql中的map函数用法(Mapper sql语句字段和实体类属性名字有什么关系)
- python线程安全队列(Python 限制线程的最大数量的方法Semaphore)
- dede软件标签(发掘dede自带的google sitemap功能)
- pythonlambda是什么函数(Python之lambda匿名函数及map和filter的用法)
- xm文档使用教程(xmapp环境搭建注意事项说明)
- asp.net中Server.MapPath的使用
- nginx跨域怎么用(如何利用map实现Nginx允许多个域名跨域)
- 织梦仿站流程图解(织梦sitemap地图实时推送给百度的教程)
- mongodb中mapreduce实例
- sqoop导出参数(sqoop export导出 map100% reduce0% 卡住的多种原因及解决)
- django查找路径(Django Sitemap 站点地图的实现方法)
- 怎么快速学好英语(怎么快速学好英语初中)
- 中国留学生都是富二代吗()
- 我们现在吃的苹果是哪里来的 原来现代苹果引入中国仅有一百多年(我们现在吃的苹果是哪里来的)
- 买绿宝不能只挑黄绿色 菜农教你3招挑,个个皮薄肉脆,香甜爆汁(买绿宝不能只挑黄绿色)
- 大果肉搭配薄瓜皮, 绿宝 脆甜爽口,不愧是甜瓜中的 佼佼者(大果肉搭配薄瓜皮)
- 河南尉氏县因地制宜发展果蔬种植 水坡镇绿宝甜瓜变 金瓜(河南尉氏县因地制宜发展果蔬种植)
热门推荐
- CSS vertical-align的用法
- python3.7对象检测(在Python中使用Neo4j的方法)
- json和xml比较与区别
- mysql基本查询方法(MySQL 重写查询语句的三种策略)
- 常用的Chrome谷歌浏览器插件
- nginx keepalived配置(Nginx+Keepalived实现Web服务器高可用)
- docker安装详细教程linux(linux中docker的安装教程)
- sql server设置标识列(Sql Server 如何去掉内容里面的Html标签)
- dedecms网站空白(DEDECMS支持中文水印的解决方法)
- laravel对请求参数解密(Laravel开启跨域请求的方法)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9