插件窝 干货文章 Nginx访问控制配置,限制指定用户访问

Nginx访问控制配置,限制指定用户访问

Nginx 限制 location 访问 550    来源:    2025-04-17

Nginx访问控制配置:限制指定用户访问

Nginx提供了多种方式来控制访问权限,可以根据IP地址、用户认证、地理位置等多种方式进行访问限制。以下是几种常用的限制指定用户访问的方法:

1. 基于IP地址的访问控制

location /restricted/ {
    allow 192.168.1.100;  # 允许的IP
    allow 10.0.0.0/24;    # 允许的IP段
    deny all;             # 拒绝其他所有IP
}

2. 基本HTTP认证

2.1 创建密码文件

sudo htpasswd -c /etc/nginx/.htpasswd username

(系统会提示输入密码)

2.2 Nginx配置

location /private/ {
    auth_basic "Restricted Area";
    auth_basic_user_file /etc/nginx/.htpasswd;
}

3. 结合IP和认证的双重限制

location /admin/ {
    allow 192.168.1.100;  # 只允许特定IP
    deny all;             # 拒绝其他IP

    auth_basic "Admin Area";
    auth_basic_user_file /etc/nginx/.htpasswd;
}

4. 基于地理位置(GeoIP)的限制

首先确保安装了GeoIP模块,然后:

geo $allowed_country {
    default no;
    US yes;  # 允许美国
    CA yes;  # 允许加拿大
}

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

5. 基于HTTP Referer的限制

location /downloads/ {
    valid_referers none blocked example.com *.example.com;
    if ($invalid_referer) {
        return 403;
    }
}

6. 限制特定HTTP方法

location /api/ {
    limit_except GET POST {
        deny all;
    }
}

最佳实践建议

  1. 对于敏感区域,建议使用IP限制+HTTP认证的双重保护
  2. 定期审查和更新访问控制列表
  3. 使用deny all作为默认策略,然后明确列出允许的例外
  4. 对于API端点,考虑结合速率限制
  5. 测试配置变更前,保持一个开放的SSH会话以防锁死自己

注意事项

  • 修改配置后记得测试并重载Nginx:sudo nginx -t && sudo nginx -s reload
  • 确保密码文件存放在Web根目录之外
  • 对于生产环境,考虑使用更高级的认证方式如OAuth或JWT

需要针对特定场景的详细配置方案,可以提供更多具体需求信息。