nginx 默认支持 basic auth 认证,只需配置 auth_basic 和 auth_basic_user_file;需用 htpasswd 生成加密密码文件并设严格权限;推荐按 location 精准控制认证范围,且必须启用 https 保障传输安全。

Nginx 默认已编译启用 ngx_http_auth_basic_module 模块,无需额外安装或开启,直接在配置中使用 auth_basic 和 auth_basic_user_file 即可实现账号密码认证。关键在于密码文件生成、路径配置和 location 作用范围的精准控制。
生成安全的密码文件
Auth Basic 不接受明文密码,必须用工具生成加密格式的凭据文件:
- Ubuntu/Debian 系统安装:
apt install apache2-utils -y - CentOS/RHEL 系统安装:
yum install httpd-tools -y或dnf install httpd-tools -y - 创建首个用户(含新建文件):
htpasswd -c /etc/nginx/.htpasswd admin - 追加其他用户(不带
-c):htpasswd /etc/nginx/.htpasswd devuser - 设权限防泄露:
chmod 640 /etc/nginx/.htpasswd && chown root:www-data /etc/nginx/.htpasswd
在 location 中启用路径级认证
推荐方式:只对敏感路径(如后台、API 管理接口)启用认证,不影响主站访问:
- 在 server 块内添加 location 块,例如保护
/admin/及其子路径:location ^~ /admin/ {<br> auth_basic "Admin Area";<br> auth_basic_user_file /etc/nginx/.htpasswd;<br>} -
^~前缀匹配优先级高,避免被正则 location 覆盖 - 若需精确匹配单个路径(如仅
/admin),用location = /admin - 每个 location 的认证独立生效,不继承上级配置
在 server 块中启用全站认证
适合测试环境、内部系统或临时封站场景:
- 将两行指令写在 server 块内、所有 location 外层:
auth_basic "Restricted Access";<br>auth_basic_user_file /etc/nginx/.htpasswd;
- 该配置会作用于该 server 下所有未显式关闭认证的路径
- 可在某个 location 中用
auth_basic off;关闭认证(如开放登录页) - 多个 server 块可各自指定不同密码文件,实现多域名、多租户隔离
必须注意的安全前提
Basic Auth 本身不加密,用户名密码以 Base64 编码传输,极易被截获:
- 务必启用 HTTPS —— 未启用 TLS 时,禁止在生产环境使用 auth_basic
- 密码文件路径不能放在 web 可访问目录下(如
/var/www/html),防止被直接下载 - 配置后执行
nginx -t校验语法,再nginx -s reload生效 - 若无弹窗,检查 error.log:常见原因是 .htpasswd 权限不足、路径错误或被
auth_basic off覆盖











