每个虚拟主机必须配置独立的 .htpasswd 文件,如 /etc/nginx/.htpasswd-site1 和 /etc/nginx/.htpasswd-site2,分别用 htpasswd -c 创建;在对应 server 块内启用 auth_basic 并指定路径;确保 Nginx 进程有读取权限(chown、chmod 640),SELinux 环境下需 restorecon;最后 nginx -t && nginx -s reload。

每个虚拟主机配独立的 .htpasswd 文件
不能多个站点共用一个密码文件,否则用户输任意站的账号都能进其他站。必须为每个 server 块单独指定认证文件路径,比如:
-
/etc/nginx/.htpasswd-site1存 site1.example.com 的用户 -
/etc/nginx/.htpasswd-site2存 site2.example.com 的用户
创建时用 htpasswd 工具分别生成:
htpasswd -c /etc/nginx/.htpasswd-site1 admin1<br>htpasswd -c /etc/nginx/.htpasswd-site2 admin2
在对应 server 块里启用 auth_basic
把认证指令写在具体站点的 server{...} 内部,而不是全局或 http 块里,避免影响其他站点:
server {<br> listen 80;<br> server_name site1.example.com;<br> root /var/www/site1;<br> <strong>auth_basic "Site1 Admin Area";</strong><br> <strong>auth_basic_user_file /etc/nginx/.htpasswd-site1;</strong><br>}
另一个站点同理,换域名、换路径、换提示文字即可。
注意权限与 SELinux(如启用)
Nginx 工作进程(如 nginx 或 www-data 用户)必须能读取对应的 .htpasswd 文件:
- 运行
chown nginx:nginx /etc/nginx/.htpasswd-*(CentOS/RHEL)或chown www-data:www-data /etc/nginx/.htpasswd-*(Ubuntu/Debian) - 设权限为
640:chmod 640 /etc/nginx/.htpasswd-* - 若系统启用了 SELinux,需确保文件上下文正确:
restorecon -v /etc/nginx/.htpasswd-*
验证配置并重载
改完后务必检查语法,再平滑重载,不中断已有连接:
nginx -t<br>nginx -s reload
浏览器访问对应域名时,会弹出独立的认证框,输入该站点专属账号才可通过。


















