由于公司机房和办公环境在一起,公司默认出口IP禁止80/443访问【运营商侧有限制】。目前阿里云用于中转,将开发环境的域名分析到阿里云,然后通过Nginx反向代理到公司出口非80端口。部分开发环境界面涉及第三方回调和验证,因此完全禁止开发环境访问外部网络是不现实的。

目前的合理需求如下:
公司网络地址段可以不受限制地访问开发环境 允许部分第三方IP在地址段加入白名单 若第三方IP不固定,需要支持第三方回调URL加入白名单 不在上述条件内全部禁止外网访问。如何实现上述简单的需求场景?
方案1:采用防火墙白名单策略实现。目前, 1 和 2 的条件只能实现
方案二:采用Nginx的allow、deny目前, 1 和 2 的条件只能实现
方案三:采用Nginx Lua 通过access_by_lua_file目前,战略可以实现上述所有条件,相对简单,转型成本较低。
在Nginx的server层配置:access_by_lua_file 'scripts/filter_white.lua' filter_white.lua 脚本配置信息:root@develop:/usr/local/nginx/scripts#catfilter_white.lualocalredis=require'resty.redis'localallow=falselocalred=redis:new()localok,err=red:connect('172.17.173.183',26379)ifnotokthenngx.log(ngx.ERR,'connecttoredisfailed:'..err)endlocalres,err=red:auth('Huajianghu@123')ifnotresthenngx.log(ngx.ERR,'failedtoauthenticate:'..err)endlocaliputils=require("resty.iputils")iputils.enable_lrucache()localwhite_ips=red:smembers('white:dev:ip')localwhitelist=iputils.parse_cidrs(white_ips)ifiputils.ip_in_cidrs(ngx.var.remote_addr,whitelist)thenallow=trueendifnotallowthenlocalurl=ngx.var.http_host..ngx.var.urilocalwhite_urls=red:smembers('white:dev:url')forindex,white_urlinipairs(white_urls)doifurl:match(white_url)thenallow=truebreakendendendifnotallowthenngx.log(ngx.ERR,"notallow:"..ngx.var.http_host..ngx.var.uri)ngx.status=ngx.HTTP_FORBIDDENngx.say(申请白名单)ngx.exit(200)end3.此脚本仅供参考,特殊场景需修改lua脚本。