Nginx IP 白名单

标签 nginx

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

据我所知,这通常是在配置文件中完成的,带有允许和拒绝列表,但如果可能的话,我需要一个不同的选项,因为我的白名单非常大。我还需要将其链接到一个网站,以便当用户登录时,用户将能够更新用户的 IP(如果发生更改)。

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

我需要帮助的地方

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

最佳答案

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

  1. 单独配置中的允许列表:适用于所有常见的 NginX 安装

    您可以将每个站点的所有允许语句放入一个简单的文本文件中,该文件只包含允许语句。将其包含在客户端的服务器 block 下。根据需要使用脚本来更改列表。最后,每次更新允许列表时重新加载(而不是重新启动)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

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

这两种方法仍然需要您付出一些努力。我认为目前还没有可满足您特定目标的直接解决方案。

关于Nginx IP 白名单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13917866/

相关文章:

node.js - Dokku( digital ocean )client_max_body_size node.js

nginx - GitLab Mattermost 中的 400 Bad Request

bash - 在新的 Ubuntu 16.04 服务器上使用 SSL 编写新的 nginx 实例的正确方法是什么?

django - 在 django + nginx + wsgi 中, "mysite.sock"是什么

nginx - 使用 NGINX 在子目录上托管 Gatsby

python - AWS EC2 免费层 Django 应用程序

redirect - 带有 HTML5 应用程序缓存的单页应用程序的 Nginx 配置

nginx - 使用 Helm 图安装 Nginx Ingress Controller

javascript - 由于 http 导致 CORS 不匹配

nginx - 如何在 NGINX 配置中指定没有扩展名的文件的 mimetype?