nginx 的 auth_basic 实现浏览器原生登录验证,需配合 https 使用,密码文件须用 htpasswd -b 生成 bcrypt 加密格式,并通过 location ^~ 配置路径保护与静态资源放行。

Linux 下用 Nginx 的 auth_basic 给网站加密码锁,核心是让浏览器在访问时弹出原生登录框,验证通过才放行。它不依赖后端程序,轻量、生效快,但必须配合 HTTPS 使用——因为 Base64 编码不是加密,HTTP 下等于明文传账号密码。
生成安全的密码文件
不能手写明文,必须用加密格式(推荐 bcrypt)。常用方法是安装 apache2-utils 后用 htpasswd:
-
安装工具:Ubuntu/Debian 运行
sudo apt install apache2-utils -
新建密码文件并添加首个用户:
sudo htpasswd -Bc /etc/nginx/.htpasswd admin(-B表示 bcrypt 加密,-c表示创建新文件;执行后会提示输入密码) -
追加其他用户:去掉
-c,例如sudo htpasswd -B /etc/nginx/.htpasswd ops -
权限设置:确保 Nginx worker 进程能读取,建议运行
sudo chmod 640 /etc/nginx/.htpasswd && sudo chown root:www-data /etc/nginx/.htpasswd
在 location 块中启用认证
保护路径要精准,推荐用 ^~ 前缀匹配(优先级高、不被正则干扰)。例如保护整个后台入口:
- 编辑站点配置文件(如
/etc/nginx/sites-available/your-site) - 在对应
server块内添加:
auth_basic "Admin Area Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
}
说明:"Admin Area Restricted" 是浏览器弹窗顶部显示的文字,别写敏感信息;路径必须是绝对路径,且 Nginx 要有读取权限。
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
可选:放行静态资源避免重复验证
如果 /admin/ 下有 CSS、JS 或图片等无需认证的资源(比如 /admin/static/),可以单独配置跳过验证:
- 新增一个更具体的
location块(位置无关,只要匹配更精确即可):
auth_basic off;
alias /var/www/your-site/static/;
}
注意:这个块需与上面的 /admin/ 块同属一个 server,且 alias 或 root 需正确指向静态文件实际路径。
必须启用 HTTPS 并重载配置
HTTP Basic Auth 在 HTTP 下极不安全,务必确认:
- 该
server块已监听 443 端口并启用 SSL:listen 443 ssl; - 已配置有效的 TLS 证书(如通过 Certbot 获取)
- 用户访问的是
https://开头的地址 - 配置检查无误后执行:
sudo nginx -t && sudo systemctl reload nginx










