插件窝 干货文章 利用Nginx Proxy Manager实现基于用户的访问控制策略

利用Nginx Proxy Manager实现基于用户的访问控制策略

Nginx 配置 Proxy 访问 1021    来源:    2025-04-11

利用Nginx Proxy Manager实现基于用户的访问控制策略

Nginx Proxy Manager (NPM) 是一个基于Nginx的图形化管理工具,可以方便地配置反向代理、SSL证书等。虽然它的界面简化了许多配置,但仍可以实现基于用户的访问控制。以下是详细的实现方案:

1. 基础认证 (Basic Authentication)

实现步骤:

  1. 登录NPM控制台

    • 默认地址通常是 http://[服务器IP]:81
  2. 选择或创建代理主机

    • 进入"Proxy Hosts",选择或创建一个需要保护的代理配置
  3. 配置访问控制

    • 在代理主机的"Advanced"选项卡中,添加以下Nginx配置片段:
auth_basic "Restricted Area";
auth_basic_user_file /etc/nginx/htpasswd/npm_proxy;
  1. 创建用户密码文件

    • 在NPM服务器上执行:
    sudo mkdir -p /etc/nginx/htpasswd
    sudo htpasswd -c /etc/nginx/htpasswd/npm_proxy username1
    

    (后续用户添加时去掉-c参数)

  2. 重启Nginx服务

    sudo docker exec -it nginx-proxy-manager nginx -s reload
    

2. 基于IP的访问控制

实现步骤:

  1. 在代理主机的"Advanced"选项卡中添加:
allow 192.168.1.0/24;
allow 10.0.0.1;
deny all;

3. 结合GeoIP限制地区访问

  1. 确保Nginx有GeoIP模块

    • 标准NPM容器已包含此模块
  2. 添加配置

geo $allowed_country {
    default no;
    US yes;
    CA yes;
    GB yes;
}

server {
    # ...其他配置...
    if ($allowed_country = no) {
        return 403;
    }
}

4. 使用外部认证服务

对于更复杂的场景,可以集成LDAP、OAuth等认证:

location / {
    auth_request /auth;
    # ...其他配置...
}

location = /auth {
    internal;
    proxy_pass http://auth-service/validate;
    proxy_pass_request_body off;
    proxy_set_header Content-Length "";
    proxy_set_header X-Original-URI $request_uri;
}

5. 基于Cookie的访问控制

set $allow_access 0;
if ($http_cookie ~* "access_token=valid") {
    set $allow_access 1;
}

if ($allow_access = 0) {
    return 403;
}

注意事项

  1. HTTPS要求:基础认证建议始终在HTTPS下使用,避免密码明文传输
  2. 性能影响:复杂的访问控制规则可能影响性能
  3. 测试验证:每次修改后应充分测试不同场景
  4. 备份配置:修改前备份NPM的数据库和配置

高级方案:与Authelia集成

对于企业级需求,可以集成Authelia提供: - 多因素认证 - 细粒度访问控制 - 单点登录

配置示例:

location / {
    auth_request /authelia-auth;
    error_page 401 =302 https://auth.yourdomain.com/?rd=$scheme://$http_host$request_uri;
    # ...其他配置...
}

location /authelia-auth {
    internal;
    proxy_pass http://authelia:9091/api/verify;
    # ...其他头信息...
}

通过以上方法,您可以根据实际需求在Nginx Proxy Manager中实现从简单到复杂的各种访问控制策略。