Site Overlay

基于Nginx实现IP域名过滤白名单

需求:

Nginx反向代理,配置接口名单+域名/IP白名单

解决此需求的背景其实本质是跨域问题,简而言之就是浏览器判断前端访问后端接口时,协议、域名、端口不一致判定有安全风险而禁止访问的一种安全同源策略。

此处商讨考量后认为在nginx层实现该需求比较合理,可以补充如下配置。

nginx.conf中进行配置:

map $http_origin $corsHost {
default "";
"~http://www.diuut.com" http://www.diuut.com;
"~http://diuut.com" http://diuut.com;
"~https://www.diuut.com" https://www.diuut.com;
"~https://diuut.com" https://diuut.com;
}
#此处配置的是放行白名单,也可以替换成IP

server
{
    listen 80;
	listen 443 ssl http2;
    server_name diuut.com www.diuut.com;
    index index.php index.html index.htm default.php default.htm default.html;
    #.....略过其他配置.......
     location /restfull/ {
            #上下文可替换为其他接口调用上下文
            proxy_pass http://localhost:11000/;
            set $flag 0; 
            if ( $http_origin != "" ) { 
              set $flag "${flag}1";
              #http_origin不为空
            }
            if ($corsHost = "" ) { 
              set $flag "${flag}2";
              #并且不在白名单中
            }
            if ($flag = "012") { 
              return 403;
            }
    }
    access_log  /www/wwwlogs/diuutcom.log main;
    error_log  /www/wwwlogs/diuut.com.error.log;
}

配置完成后 ./nginx -s reload重新加载配置后即可生效。

测试效果:

达到预期目的

我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:
https://cloud.tencent.com/developer/support-plan?invite_code=ujabyts6k73f

2 thoughts on “基于Nginx实现IP域名过滤白名单

  1. 您好~我是腾讯云开发者社区运营,关注了您分享的技术文章,觉得内容很棒,我们诚挚邀请您加入腾讯云自媒体分享计划。完整福利和申请地址请见:https://cloud.tencent.com/developer/support-plan
    作者申请此计划后将作者的文章进行搬迁同步到社区的专栏下,你只需要简单填写一下表单申请即可,我们会给作者提供包括流量、云服务器等,另外还有些周边礼物

发表回复

您的电子邮箱地址不会被公开。

A beliving heart is your magic My heart
欢迎来到Diuut的个人博客,这里是我的一些零零碎碎的知识汇总,希望有能帮到你的内容。 | 蜀ICP备2021011635号-1 | Copyright © 2024 Diuut. All Rights Reserved.