Nginx Ip白名单

时间:2012-12-17 16:18:37

标签: nginx

我想将我的nginx代理服务器配置为仅允许某些IP访问它。

据我所知,这通常在配置文件中完成,包含allow和deny列表,但如果可能的话我需要一个不同的选项,因为我的白名单非常大。我还需要将其链接到一个网站,以便在用户登录时,如果用户的IP已经更改,则用户将能够更新用户的IP。

简而言之,白名单用户将能够使用我的代理服务器,但如果用户的IP因任何原因发生变化,用户仍然可以登录我的网站并更新该白名单IP。

我需要帮助的地方

nginx是否有办法从外部源读取IP白名单,例如htaccess或mysql?如果是这样,该列表的最佳格式是什么,以便它可以轻松链接并自动更新?我打算专门构建网站,以便当用户登录其帐户时,白名单会自动更新。因此,我希望我的白名单符合设计师使用的最佳格式,以便更轻松地将白名单与用户帐户集成。

2 个答案:

答案 0 :(得分:38)

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

  1. 分隔配置中的允许列表:适用于所有常见的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
    
  2. 使用嵌入式Lua: NginX的必需自定义编译

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

  3. 这两种方法仍然需要您付出一些努力。我不相信您的特定目标已经可以使用直接销售解决方案。

答案 1 :(得分:0)

也许nginx.shared.dict(http://wiki.nginx.org/HttpLuaModule#lua_shared_dict)可以帮到你?