示例:
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
完成这些步骤后,你的密码保护就设置好了!