使用 ngx_http_auth_basic_module 可为内部管理界面添加密码防护,无需修改程序或依赖数据库;核心是配置 auth_basic 和 auth_basic_user_file 指令,配合 htpasswd 生成加密密码文件,并在 location 块中精准启用认证。

用 ngx_http_auth_basic_module 给内部管理界面加一层密码防护,不需改程序、不依赖数据库,几行配置就能生效。核心就是两个指令:开启认证提示 + 指定密码文件。
确认模块已启用并准备密码文件
Nginx 大多数发行版默认已编译该模块,无需额外安装。重点是生成合规的密码文件:
- 推荐用
htpasswd工具(来自httpd-tools包)生成加密密码,例如:htpasswd -c /etc/nginx/.htpasswd admin(首次创建时加-c) - 密码文件路径必须写绝对路径,且确保 Nginx 进程(如
www-data或nginx用户)有读取权限(chmod 644 /etc/nginx/.htpasswd) - 避免手写明文密码行(如
user:password),因不安全且部分版本不兼容;务必用htpasswd生成标准格式(含哈希)
在 location 块中精准启用认证
不要直接套在 server 级别,除非你想锁整个站点。保护后台路径(如 /admin/、/wp-admin/、/internal/)更合理:
- 使用前缀匹配
^~ /admin/,避免正则干扰,优先级高且语义清晰 - 配置示例:
location ^~ /admin/ {<br> auth_basic "Admin Login Required";<br> auth_basic_user_file /etc/nginx/.htpasswd;<br>} - 提示文字(
auth_basic后的字符串)会显示在浏览器弹窗中,建议简洁明确,不含特殊符号
验证与常见问题处理
改完配置后必须检查语法并重载,不能只重启:
- 执行
nginx -t确认配置无误,再运行nginx -s reload - 访问
https://yoursite.com/admin/,应立即弹出认证框;若无反应,检查 location 是否被其他规则覆盖(如location /内嵌套)、路径是否带尾斜杠(/admin和/admin/匹配不同) - 若提示 500 或日志报“open() failed”,大概率是
auth_basic_user_file路径错误或权限不足,用ls -l /etc/nginx/.htpasswd核对属主和读取权限
宝塔用户可跳过手动编辑
如果你用宝塔面板,无需碰配置文件:
- 进【网站】→【设置】→【网站目录】,开启【密码访问】,填入用户名和密码即可
- 宝塔会自动生成
.htpasswd并写入对应location规则,适合快速启用、无定制需求的场景 - 如需保护非根目录下的子路径(如
/api/private),仍建议切到【配置文件】选项卡手动添加独立location块











