核心是生成加密密码文件并配置location块启用认证:先用htpasswd创建或追加用户至/etc/nginx/.htpasswd(需设644权限),再在对应路径如^~ /admin/中添加auth_basic和auth_basic_user_file指令,最后nginx -t验证后reload生效。

用 ngx_http_auth_basic_module 给后台地址加基础认证,核心就两步:生成安全的密码文件 + 在对应路径的 location 块里启用认证。不改代码、不连数据库,配置生效快。
生成合规的密码文件
别手写明文密码行(如 admin:123456),必须用 htpasswd 工具生成加密格式:
- 安装工具:CentOS/RHEL 运行
yum install -y httpd-tools;Ubuntu/Debian 运行apt install -y apache2-utils - 首次创建:执行
htpasswd -c /etc/nginx/.htpasswd admin,按提示输入密码(-c表示新建,已有文件慎用) - 追加用户:去掉
-c,例如htpasswd /etc/nginx/.htpasswd ops - 确保权限:运行
chmod 644 /etc/nginx/.htpasswd,并确认 Nginx 工作用户(如www-data或nginx)能读取该文件
在 location 中精准启用认证
只保护后台路径,比如 /admin/、/wp-admin/、/internal/,不要直接套在 server 级别:
- 用前缀匹配
^~ /admin/,避免正则干扰,优先级高且语义清晰 - 配置示例:
location ^~ /admin/ {<br> auth_basic "Admin Login Required";<br> auth_basic_user_file /etc/nginx/.htpasswd;<br> } - 提示文字建议简洁明确,不含中文标点或特殊符号,浏览器弹窗中会直接显示
- 注意路径尾部斜杠:
/admin和/admin/匹配行为不同,保持前后一致
验证与排错要点
改完配置不能直接重启,必须走标准流程:
- 先检查语法:
nginx -t,通过才继续 - 再重载配置:
nginx -s reload(不是systemctl restart nginx) - 访问
https://yoursite.com/admin/,应立即弹出认证框;若无反应,检查是否被其他location /规则覆盖 - 若报 500 错误或 Nginx 错误日志出现
open() "/etc/nginx/.htpasswd" failed,重点查路径是否写错、文件是否存在、权限是否为 644、属主是否可读
宝塔用户快速启用方式
如果你用宝塔面板,完全不用手动编辑配置文件:
- 进【网站】→【设置】→【网站目录】,开启【密码访问】
- 填入用户名和密码,宝塔自动创建
.htpasswd并注入正确location规则 - 适合无定制需求的场景;如需保护非根路径下的子接口(如
/api/private),仍建议切到【配置文件】选项卡手动添加独立location块











