需求:
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域名过滤白名单”