JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

nginx 结合map配置跨域

wys521 2024-09-11 13:24:03 精选教程 37 ℃ 0 评论

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;
    }
}

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表