我想将我的nginx代理服务器配置为仅允许某些IP访问它。
据我所知,这通常在配置文件中完成,包含allow和deny列表,但如果可能的话我需要一个不同的选项,因为我的白名单非常大。我还需要将其链接到一个网站,以便在用户登录时,如果用户的IP已经更改,则用户将能够更新用户的IP。
简而言之,白名单用户将能够使用我的代理服务器,但如果用户的IP因任何原因发生变化,用户仍然可以登录我的网站并更新该白名单IP。
nginx是否有办法从外部源读取IP白名单,例如htaccess或mysql?如果是这样,该列表的最佳格式是什么,以便它可以轻松链接并自动更新?我打算专门构建网站,以便当用户登录其帐户时,白名单会自动更新。因此,我希望我的白名单符合设计师使用的最佳格式,以便更轻松地将白名单与用户帐户集成。
答案 0 :(得分:38)
我知道有两种方法可以解决这个问题。
分隔配置中的允许列表:适用于所有常见的NginX安装
您可以将所有allow语句放在每个站点的简单文本文件中,该文件只包含allow语句。包括在客户端的服务器块下。根据需要使用脚本来更改列表。每次更新允许列表时,最后重新加载(不重新启动)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
使用嵌入式Lua: NginX的必需自定义编译
使用第三方嵌入式Lua add on模块从源代码重新编译NginX。使用lua脚本主动拒绝不支持的IP地址。请参阅access_by_lua
下的第二个示例。有多种方法可以使用添加。我建议使用access_by_lua_file
将lua脚本放在外部位置。
这两种方法仍然需要您付出一些努力。我不相信您的特定目标已经可以使用直接销售解决方案。
答案 1 :(得分:0)
也许nginx.shared.dict(http://wiki.nginx.org/HttpLuaModule#lua_shared_dict)可以帮到你?