示例:
location /admin {<br /> allow 68.38.0.0/16; # 只允许这个IP段的访问<br /> deny all; # 拒绝所有其他IP</p> <p> limit_req zone=req_per_ip burst=5 nodelay; # 请求频率限制</p> <p> auth_basic "Admin Panel"; # 启用基础认证<br /> auth_basic_user_file /etc/nginx/.htpasswd; # 密码文件路径<br /> }认证流程:
访问
/admin路径时Nginx检查IP是否在 68.38.0.0/16 范围内
即使IP被允许,仍然需要输入用户名密码
密码验证通过后才能访问
各指令作用:
IP限制:
allow/deny- 网络层访问控制频率限制:
limit_req- 防止暴力破解密码认证:
auth_basic- 应用层安全验证如果你不想输入密码:
方案1:完全移除认证
location /admin {<br /> allow 68.38.0.0/16;<br /> deny all;<br /> limit_req zone=req_per_ip burst=5 nodelay;<br /> # 移除下面两行<br /> # auth_basic "Admin Panel";<br /> # auth_basic_user_file /etc/nginx/.htpasswd;<br /> }方案2:仅对特定IP免密码
location /admin {<br /> allow 68.38.0.0/16;<br /> deny all;<br /> limit_req zone=req_per_ip burst=5 nodelay;</p> <p> # 仅当不在信任IP时才要求密码<br /> satisfy any; # 满足IP或密码任一条件即可<br /> auth_basic "Admin Panel";<br /> auth_basic_user_file /etc/nginx/.htpasswd;<br /> }如何设置密码
方法一:使用 htpasswd 命令(推荐)
# 安装 htpasswd 工具(如果还没有)<br /> sudo apt-get install apache2-utils # Ubuntu/Debian<br /> sudo yum install httpd-tools # CentOS/RHEL</p> <p># 创建用户(首次创建需要 -c 参数)<br /> sudo htpasswd -c /etc/nginx/.htpasswd username</p> <p># 添加更多用户(不要用 -c 参数,否则会覆盖文件)<br /> sudo htpasswd /etc/nginx/.htpasswd another_user方法二:使用 openssl 命令
# 创建密码文件<br /> echo "username:$(openssl passwd -crypt password)" | sudo tee /etc/nginx/.htpasswd常用 htpasswd 选项:
-c:创建新文件(会覆盖现有文件)-b:直接在命令行输入密码-B:使用bcrypt加密(更安全)-d:使用CRYPT加密(默认)
示例:
# 使用更安全的bcrypt加密<br /> sudo htpasswd -B -c /etc/nginx/.htpasswd admin</p> <p># 批量添加用户(无提示)<br /> sudo htpasswd -b /etc/nginx/.htpasswd user1 password123
完成这些步骤后,你的密码保护就设置好了!
「点点赞赏,手留余香」
声明:本文为原创文章,版权归旷野小站所有,欢迎分享本文,转载请保留出处!