启用HTTP Basic Auth需在location块中配置auth_basic和auth_basic_user_file指令,且必须配合HTTPS使用,因Base64编码不加密;密码文件须设为640权限并置于Web根目录外;推荐用^~或=精确匹配路径,并可单独关闭静态资源认证。

直接在 location 块里加两行指令就能启用,但必须搭配 HTTPS 才算真正可用——因为 Basic Auth 本身不加密,Base64 编码等于明文传密码。
配置 auth_basic 的核心写法
在目标路径的 location 块中写入:
-
auth_basic "提示文字":开启认证,引号内是浏览器弹窗顶部显示的 realm(比如
"Admin Area"),别写敏感词如“数据库”“root” -
auth_basic_user_file /etc/nginx/.htpasswd:指定密码文件绝对路径,Nginx worker 进程需有读权限(建议
chmod 640,属主root,属组www-data或nginx)
按路径精准控制保护范围
避免一刀切,推荐用前缀匹配方式,优先级高、不易被其他规则覆盖:
- 保护整个后台目录(如
/admin/及其所有子路径):location ^~ /admin/ { auth_basic "Admin Area"; auth_basic_user_file /etc/nginx/.htpasswd; } - 只保护单个文件(如系统状态页):
location = /status { auth_basic "System Status"; auth_basic_user_file /etc/nginx/.htpasswd; }
放行静态资源(可选但实用)
如果受保护路径下有 CSS、JS 或图片等无需认证的资源,单独加一个更精确的 location 关掉认证即可:
- 例如放行
/admin/static/下全部内容:location ^~ /admin/static/ { auth_basic off; alias /var/www/static/; } - 这个块位置不关键,只要匹配更具体(比如带
^~或=),Nginx 就会优先进入它
HTTPS 是硬性前提
HTTP Basic Auth 的凭证在传输中未加密,不走 HTTPS 就等于把账号密码发到网上:
- 确认
server块监听的是443 ssl,且已配置有效证书 - 访问地址必须是
https://开头,http://站点上启用了也等于没保护 - .htpasswd 文件绝不能放在 Web 根目录下(如
/var/www/html),防止被直接下载泄露
配完务必执行 sudo nginx -t 检查语法,再 sudo nginx -s reload 生效。不复杂但容易忽略。


















