如何利用map实现Nginx允许多个域名跨域


Posted in Servers onMarch 31, 2021

常见的 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允许多个域名跨域内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Servers 相关文章推荐
nginx如何将http访问的网站改成https访问
Mar 31 Servers
Nginx配置SSL证书出错解决方案
Mar 31 Servers
Nginx访问日志及错误日志参数说明
Mar 31 Servers
详解nginx进程锁的实现
Jun 14 Servers
总结高并发下Nginx性能如何优化
Nov 01 Servers
Apache Linkis 中间件架构及快速安装步骤
Mar 16 Servers
深入解析Apache Hudi内核文件标记机制
Mar 31 Servers
CKAD认证中部署k8s并配置Calico插件
Mar 31 Servers
Nginx流量拷贝ngx_http_mirror_module模块使用方法详解
Apr 07 Servers
Windows Server 2019 配置远程控制以及管理方法
Apr 28 Servers
使用Nginx+Tomcat实现负载均衡的全过程
May 30 Servers
Nginx 过滤静态资源文件的访问日志的实现
Mar 31 #Servers
Nginx的反向代理实例详解
nginx反向代理时如何保持长连接
Mar 31 #Servers
Nginx + consul + upsync 完成动态负载均衡的方法详解
Mar 31 #Servers
浅谈Nginx 中的两种限流方式
Mar 31 #Servers
查看nginx配置文件路径和资源文件路径的方法
Mar 31 #Servers
nginx里的rewrite跳转的实现
Mar 31 #Servers
You might like
ThinkPHP中order()使用方法详解
2016/04/19 PHP
PHP实现上一篇下一篇的方法实例总结
2016/09/22 PHP
PHP实现添加购物车功能
2017/03/06 PHP
基于jQuery的可以控制左右滚动及自动滚动效果的代码
2010/07/25 Javascript
JS实现的新浪微博大厅文字内容滚动效果代码
2015/11/05 Javascript
jquery实现右侧栏菜单选择操作
2016/03/04 Javascript
javaScript数组迭代方法详解
2016/04/14 Javascript
jQuery 获取跨域XML(RSS)数据的相关总结分析
2016/05/18 Javascript
Bootstrap模态框(modal)垂直居中的实例代码
2016/08/18 Javascript
jQuery实现的动态文字变化输出效果示例【附演示与demo源码下载】
2017/03/24 jQuery
JS图片延迟加载插件LazyImgv1.0用法分析【附demo源码下载】
2017/09/04 Javascript
Vue父组件调用子组件事件方法
2018/02/23 Javascript
妙用缓存调用链实现JS方法的重载
2018/04/30 Javascript
jquery图片预览插件实现方法详解
2019/07/18 jQuery
jQuery 判断元素是否存在然后按需加载内容的实现代码
2020/01/16 jQuery
Python列表list数组array用法实例解析
2014/10/28 Python
Python选择排序、冒泡排序、合并排序代码实例
2015/04/10 Python
Python的Django框架下管理站点的基本方法
2015/07/17 Python
Python探索之爬取电商售卖信息代码示例
2017/10/27 Python
python tensorflow学习之识别单张图片的实现的示例
2018/02/09 Python
Python将多个list合并为1个list的方法
2018/06/27 Python
使用python批量读取word文档并整理关键信息到excel表格的实例
2018/11/07 Python
解决pycharm下os.system执行命令返回有中文乱码的问题
2019/07/07 Python
python logging模块的使用
2020/09/07 Python
html5 figure和figcaption的使用方法
2018/09/10 HTML / CSS
adidas美国官网:adidas US
2016/09/21 全球购物
Coccinelle官网:意大利的著名皮具品牌
2019/05/15 全球购物
美体小铺波兰官方网站:The Body Shop波兰
2019/09/03 全球购物
大学生预备党员自我评价分享
2013/11/16 职场文书
应用数学专业求职信
2014/03/14 职场文书
2015年三八妇女节活动总结
2015/02/06 职场文书
2016保送生自荐信范文
2016/01/29 职场文书
.Net Core导入千万级数据至Mysql的步骤
2021/05/24 MySQL
详细了解java监听器和过滤器
2021/07/09 Java/Android
vue实现列表拖拽排序的示例代码
2022/04/08 Vue.js
服务器间如何实现文件共享
2022/05/20 Servers