Nginx Ip白名单

我想configuration我的nginx代理服务器只允许某些IP访问它。

据我所知,这通常是在configuration文件,允许和拒绝列表,但我需要一个不同的select,如果可能的话,因为我的白名单是非常大的。 我也需要将其链接到一个网站,以便当用户login时,用户将能够更新用户的IP,如果它已经改变。

简而言之,列入白名单的用户将能够使用我的代理服务器,但如果由于某种原因而导致用户的IP更改,用户仍可以login我的站点并更新列入白名单的IP。

我需要帮助的地方

有没有办法让nginx从外部来源,如htaccess或MySQL读取IP白名单? 如果是这样,该列表的最佳格式是什么,以便它可以很容易地链接到并自动更新? 我打算专门build立网站,以便当用户login到他们的帐户时,白名单会自动更新。 因此,我希望我的白名单能够成为devise师使用的最佳格式,以便将白名单与用户帐户相集成。

有两种方法我知道你可以解决这个问题。

  1. Allow-list in separate config: 适用于所有常见的Nginx安装

    您可以将所有的允许语句放在一个简单的文本文件中,每个站点只包含允许的语句。 将其包含在客户端的服务器块下。 根据需要使用脚本来更改列表。 最后,每次更新允许列表时重新加载(不重新启动)nginx配置。 这可能如下所示:

    cat /var/www-allow/client1-allow.conf allow 192.168.1.1; allow 10.0.0.1; cat /etc/nginx/sites/client1.conf ... server { include /var/www-allow/client1-allow.conf; deny all; } echo Test NginX configuration nginx -t echo Reload NginX configuration (**adjust for your setup**) service nginx reload 
  2. 使用嵌入式Lua: 需要自定义编译NginX

    重新编译源于第三方嵌入式Lua附加模块的Nginx。 使用lua脚本主动拒绝不支持的IP地址。 请参阅access_by_lua下的第二个示例。 有多种方法可以使用附加功能。 我建议使用access_by_lua_file将lua脚本放在外部位置。

这两种方法仍然需要您的努力。 我不相信您的具体目标已经提供了一个解决方案。

也许nginx.shared.dict( http://wiki.nginx.org/HttpLuamodulee#lua_shared_dict )会帮助你?