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

2025-05-26 0 86

常见的 Nginx 配置允许跨域

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14
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 时使用该变量就能实现一个动态的、多个的允许跨域域名

一个示例配置如下:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23
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允许多个域名跨域内容请搜索快网idc以前的文章或继续浏览下面的相关文章希望大家以后多多支持快网idc!

原文链接:https://priesttomb.github.io/技术/2020/10/24/using-map-to-set-multiple-allow-origins-in-nginx/

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 如何利用map实现Nginx允许多个域名跨域 https://www.kuaiidc.com/53199.html

相关文章

发表评论
暂无评论