Nginx启用了HTTP基础认证auth_basic 指令

示例:

location /admin {
    allow 68.38.0.0/16;    # 只允许这个IP段的访问
    deny all;              # 拒绝所有其他IP
    
    limit_req zone=req_per_ip burst=5 nodelay;  # 请求频率限制
    
    auth_basic "Admin Panel";                   # 启用基础认证
    auth_basic_user_file /etc/nginx/.htpasswd;  # 密码文件路径
}

认证流程:

访问 /admin 路径时

Nginx检查IP是否在 68.38.0.0/16 范围内

即使IP被允许,仍然需要输入用户名密码

密码验证通过后才能访问

各指令作用:

IP限制:allow/deny – 网络层访问控制

频率限制:limit_req – 防止暴力破解

密码认证:auth_basic – 应用层安全验证

如果你不想输入密码:

方案1:完全移除认证

location /admin {
    allow 68.38.0.0/16;
    deny all;
    limit_req zone=req_per_ip burst=5 nodelay;
    # 移除下面两行
    # auth_basic "Admin Panel";
    # auth_basic_user_file /etc/nginx/.htpasswd;
}

方案2:仅对特定IP免密码

location /admin {
    allow 68.38.0.0/16;
    deny all;
    limit_req zone=req_per_ip burst=5 nodelay;
    
    # 仅当不在信任IP时才要求密码
    satisfy any;  # 满足IP或密码任一条件即可
    auth_basic "Admin Panel";
    auth_basic_user_file /etc/nginx/.htpasswd;
}

如何设置密码

方法一:使用 htpasswd 命令(推荐)

# 安装 htpasswd 工具(如果还没有)
sudo apt-get install apache2-utils  # Ubuntu/Debian
sudo yum install httpd-tools        # CentOS/RHEL

# 创建用户(首次创建需要 -c 参数)
sudo htpasswd -c /etc/nginx/.htpasswd username

# 添加更多用户(不要用 -c 参数,否则会覆盖文件)
sudo htpasswd /etc/nginx/.htpasswd another_user

方法二:使用 openssl 命令

# 创建密码文件
echo "username:$(openssl passwd -crypt password)" | sudo tee /etc/nginx/.htpasswd

常用 htpasswd 选项:

  • -c:创建新文件(会覆盖现有文件)
  • -b:直接在命令行输入密码
  • -B:使用bcrypt加密(更安全)
  • -d:使用CRYPT加密(默认)

示例:

# 使用更安全的bcrypt加密
sudo htpasswd -B -c /etc/nginx/.htpasswd admin

# 批量添加用户(无提示)
sudo htpasswd -b /etc/nginx/.htpasswd user1 password123

完成这些步骤后,你的密码保护就设置好了!

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部
×
问题求助