nginx+lua ip访问限制

作者: jaclon 分类: Linux, PHP 发布时间: 2017-03-29 17:34 ė 61条评论

1,使用场景
当域名访问通过代理时,nginx中的remote_addr取到的是代理服务器的ip,此时无法使用nginx arrow、deny 进行ip限制

2,获取真实ip
在nginx配置文件的http节点增加如下配置:

# Get Real IP
map $http_x_forwarded_for $clientRealIp {
	"" $remote_addr;
	~^(?P<firstAddr>[0-9\.]+),?.*$ $firstAddr;
}

#此处理使用map命令创建clientRealIp变量
#  "" $remote_addr;  #如果没有代理,则真实ip为remote_addr
#  ~^(?P<firstAddr>[0-9\.]+),?.*$ $firstAddr; #如果代理不为空,则取第一个ip

3,编写lua,内容如下:
--ip白名单

ipwhitelist = {"172.16.1.166","172.16.1.62"}

function whiteip()
  if next(ipwhitelist) ~= nil then
     for _,ip in pairs(ipwhitelist) do
         if ngx.var.clientRealIp == ip then 
            return true
         end
     end
  end
     return false
end

if whiteip() == false then
    ngx.exit(ngx.HTTP_FORBIDDEN) --如果客户ip不在白名单中,返回403错误
end

4,访问控制

location ^~ /api/Company/list {
	access_by_lua_file /usr/local/nginx/lua/api_iplimit.lua;
	
	#other code
}

本文出自 肥蕉博客@IT技术,热门话题,生活随笔,美图欣赏,转载时请注明出处及相应链接。

本文永久链接: http://www.bananawolf.com/html/2017/03/1003.html

一条评论

  1. jaclon 三月 29, 2017 5:41 下午 回复

    好久没有写博客了,自己顶一下

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*

Ɣ回顶部