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

2022-11-22 20:28:06 浏览数 (1)

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

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

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

nginx.conf中进行配置:

代码语言:javascript复制
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

Post Views: 15

0 人点赞