当前位置:首页 > 技术文章 > 正文内容

nginx 结合map配置跨域

arlanguage4个月前 (12-26)技术文章32

map指令使用ngx_http_map_module模块提供。nginx默认会加载这个模块,需要手动指定 --without-http_map_module

#语法

map $var1 $var2 { ... }

map为一个变量设置映射表。映射表由两列组成,匹配模式和对应的值

匹配模式可以是一个简单的字符串或者正则表达式

正则表达式如果以 “~” 开头,表示对大小写敏感。以 “~*” 开头,表示对大小写不敏感

map $http_user_agent $agent {
    default "";
    ~curl curl;
}

map指令的三个参数:

default:没有匹配结果将使用的默认值。如果没有设置 default,将会用一个空的字符串作为默认结果

hostnames:允许用前缀或者后缀掩码指定域名作为源变量值。这个参数必须写在值映射列表的最前面

include:包含一个或多个含有映射值的文件

// 示例1
// 匹配请求 url 的参数,如果参数是 from 则设置 $origin = 1 ,默认设置 $origin = 0
map $args $origin {
    default 0;
    from    1;
}

// 说明
$args 是nginx的内置变量,用于获取请求 url 的参数
如果 $args 匹配到 from 那么 $origin 的值会被设为 1
如果 $args 一个都匹配不到,$origin 会使用default 定义的默认值 0

#示例2

实现允许多个域名跨域访问

// 配置单域名跨域访问
// server段直接添加以下代码
#add_header Access-Control-Allow-Origin "*"; //表示支持所有域名跨域访问,生产环境不推荐
add_header Access-Control-Allow-Origin "http://api.share.cn";
add_header Access-Control-Allow-Methods "POST, GET, PUT, OPTIONS, DELETE";
add_header Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept;

// 允许多域名跨域访问
map $http_origin $corsHost {
    default "";
    "~http://go.share.cn" http://go.share.cn;
    "~http://api.share.cn" http://api.share.cn;
}
// server添加以下代码
add_header Access-Control-Allow-Origin $corsHost;
add_header Access-Control-Allow-Methods "POST, GET, PUT, OPTIONS, DELETE";
add_header Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept;

#示例3

使用源变量匹配一些规则,映射到自定义变量,然后在页面输出(常用于调试)

map $uri $params {
    ~^/test/(.*) http://api.share.cn/;
}
server {
    listen       80;
    server_name  api.share.cn;
 
    location /test {
            default_type text/plain;
            echo uri: $uri;
            echo param: $params;
    }
}

扫描二维码推送至手机访问。

版权声明:本文由AR编程网发布,如需转载请注明出处。

本文链接:http://www.arlanguage.com/post/474.html

分享给朋友:

“nginx 结合map配置跨域” 的相关文章

推荐一个Nginx配置文件的网站 nginx配置文件的几大模块

NGINX 不仅仅是一个 Web 服务器。你可能已经知道了。我们喜欢 NGINX,因为:内存使用率低高并发异步事件驱动架构负载均衡反向代理FastCGI 支持缓存 (PHP)静态文件的惊人快速处理使用 SNI 的 TLS/SSL特征:HTTPS、HTTP/2、IPv6、certbot、HSTS、安全...

nginx代理常用配置

1. 最简反向代理配置在http节点下,使用upstream配置服务地址,使用server的location配置代理映射。upstream my_server { server 10.0.0.2:8080; keepalive 2000;}server { listen 80; server_...

08《Nginx 入门教程》Nginx 的 Http 模块介绍(中)

在前面介绍完 post-read、server-rewrite、find-config、rewrite 和 post-rewrite 阶段后,我们将继续学习 preaccess 和 access 两个阶段,中间会涉及部分模块,一同进行说明。1. preaccess 阶段在 preaccess 阶段在...

nginx-UrlRewrite 实现URL重写转发

URL重写在前后端分离的开发模式中,会遇到这样一个需求:前端通过特定路由前缀来访问后端接口,例如:http://localhost/api/getUser,这里 api 即是每一个前端 request 所多加的前缀。nginx 需要把http://localhost/api/getUser 转换成后...

学习Java需要掌握哪些技能?

想要找到Java工程师的工作,必须具备Java岗位要求的相关技能,应该有夯实的Java基础知识,熟练掌握、JavaSE开发、JavaWEB与数据库高级编程、企业级框架、大型企业级项目实战等相关的开发技能。01 Java基础知识Java入门、变量,基本表达式、流程分支、单层循环、双层循环、数组入门等。...

在SpringBoot+Vue3项目中通过Nginx代理WebSocket实现跨域通信

引言在现代Web开发中,实时数据交互变得越来越重要,而WebSocket作为HTML5标准的一部分,提供了一种全双工、长连接的通信方式,使得服务器与客户端可以进行双向实时通信。但在实际应用中,由于浏览器同源策略的限制,前端应用直接访问后端WebSocket服务可能会受到阻碍,尤其是在前后端部署不在同...