nginx 中通过 auth_basic 实现 http 基础认证需三步:启用认证(auth_basic "提示文字")、指定密码文件(auth_basic_user_file)、搭配 https 使用;推荐用 ^~ 前缀保护固定路径如 /admin/,静态资源可单独配置 auth_basic off 放行。

在 Nginx 的 location 块中加 auth_basic,就能让访问该路径时弹出浏览器原生登录框,输入正确账号密码才放行。关键就三步:启用认证、指定提示文字、指向密码文件。
配置 auth_basic 的基本写法
在对应 location 块内添加两行指令即可:
- auth_basic "Admin Access Required"; —— 开启认证,“Admin Access Required”是显示在浏览器弹窗标题栏的提示文字,可自定义,但别写敏感信息(如“数据库管理员”)
- auth_basic_user_file /etc/nginx/.htpasswd; —— 指定密码文件的绝对路径,Nginx worker 进程必须有读取权限(建议权限设为 640,属主 root,属组 www-data)
推荐用 ^~ 前缀匹配保护目录
比如要保护后台地址 /admin/ 及其所有子路径(如 /admin/api/、/admin/login),推荐这样写:
location ^~ /admin/ {
auth_basic "Admin Area Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
}
其中 ^~ 表示前缀匹配且优先级高于正则匹配,适合固定路径保护,避免规则被其他 location 覆盖。
静态资源可单独放行(可选)
如果 /admin/ 下包含 CSS、JS 或图片等无需认证的静态资源(如 /admin/static/),可以再加一个更具体的 location 先放行:
location ^~ /admin/static/ {
auth_basic off;
# 其他静态资源配置,如 root 或 alias
}
注意:这个块必须写在受保护的 /admin/ 块之前或之后都行,只要匹配更精确,Nginx 就会优先进入它。
必须搭配 HTTPS 使用
HTTP Basic Auth 本身不加密——用户名密码是以 Base64 编码后明文传的。没有 HTTPS,等于把凭证直接发到网上。所以务必确保:
- 该 location 所在的 server 块已启用 SSL(listen 443 ssl)
- 浏览器访问的是
https://开头的地址 - 不要在纯 HTTP 站点上启用 auth_basic











