nginx 通过在 location 块中配置 auth_basic 和 auth_basic_user_file 指令,结合 htpasswd 生成的加密密码文件(推荐 bcrypt)、^~ 前缀精准匹配路径、单独放行静态资源、强制 https 传输及严格文件权限(640),即可为 /admin/ 等后台路径启用轻量 http basic auth 认证。

直接在 Nginx 的 location 块中配置 auth_basic 和 auth_basic_user_file,就能为后台路径(如 /admin/ 或 /wp-admin/)加上基于密码的 HTTP Basic Auth 认证。它不改后端代码、不连数据库,几行配置立即生效。
生成加密的密码文件
不能手写明文密码,必须用标准工具生成加密格式(推荐 bcrypt):
- Ubuntu/Debian:运行
sudo apt install apache2-utils - CentOS/RHEL:运行
sudo yum install httpd-tools - 首次创建用户(例如用户名
admin):htpasswd -Bc /etc/nginx/.htpasswd admin(-B表示 bcrypt,-c表示新建文件) - 追加用户(如
ops):htpasswd -B /etc/nginx/.htpasswd ops - 设好权限防止泄露:
chmod 640 /etc/nginx/.htpasswd,并确保属组可读(如chown root:www-data /etc/nginx/.htpasswd)
在 location 中精准启用认证
只保护真实需要的路径,避免误拦静态资源或 API 接口:
- 用
^~ /admin/这类前缀匹配,语义明确、优先级高,不易被正则规则覆盖 - 典型配置示例:
location ^~ /admin/ {<br> auth_basic "Admin Login Required";<br> auth_basic_user_file /etc/nginx/.htpasswd;<br>} - 若该路径下含 CSS/JS 等静态资源(如
/admin/static/),可单独放行:location ^~ /admin/static/ { auth_basic off; }
必须搭配 HTTPS 使用
HTTP Basic Auth 的凭证本质是 Base64 编码,等同于明文传输:
- 未启用 HTTPS 时,密码可能被中间人截获,浏览器也可能拒绝发送认证头
- 配置完成后务必执行
nginx -t检查语法,再用nginx -s reload重载配置 - 访问
https://yourdomain.com/admin/应立即弹出登录框;若无反应,检查是否被更宽泛的location /覆盖,或路径末尾斜杠是否一致(/admin≠/admin/) - 返回 500 错误?Nginx 错误日志通常提示 “open() failed”,重点排查:
auth_basic_user_file路径是否拼错、文件是否存在、权限是否为 640 且属组可读
宝塔等可视化面板用户快速操作
如果你用宝塔、AMH 或类似面板,无需手动写配置:
- 进【网站】→【设置】→【网站目录】,开启【密码访问】,填入用户名和密码即可
- 面板会自动创建
.htpasswd文件,并注入标准location配置











