Nginx支持为不同域名的server块独立配置auth_basic认证。需在各server块内分别设置auth_basic和指向独立htpasswd文件的auth_basic_user_file,并用htpasswd工具生成对应密码文件,最后通过nginx -t验证并-s reload生效。

在 Nginx 中,可以为基于域名的虚拟主机(server 块)单独配置 auth_basic 身份验证,实现不同域名使用不同的用户名密码保护。关键在于将认证指令放在对应的 server 块内,而非全局或 location 外层,并确保 auth_basic_user_file 指向各自独立的密码文件。
1. 为每个 server 块独立启用 auth_basic
直接在需要保护的 server 块中添加认证配置,互不影响:
server {
listen 80;
server_name site-a.example.com;
root /var/www/site-a;
<pre class="brush:php;toolbar:false;">auth_basic "Restricted Access - Site A";
auth_basic_user_file /etc/nginx/auth/site-a.htpasswd;
location / {
try_files $uri $uri/ =404;
}}
server { listen 80; server_name site-b.example.com; root /var/www/site-b;
auth_basic "Restricted Access - Site B";
auth_basic_user_file /etc/nginx/auth/site-b.htpasswd;
location / {
try_files $uri $uri/ =404;
}}
2. 准备各自的 htpasswd 密码文件
使用 htpasswd 工具为每个站点生成独立密码文件(需安装 apache2-utils 或 httpd-tools):
-
创建目录并设权限:
sudo mkdir -p /etc/nginx/auth && sudo chmod 755 /etc/nginx/auth -
为 site-a 创建用户(首次用
-c创建新文件):sudo htpasswd -c /etc/nginx/auth/site-a.htpasswd alice -
为 site-b 添加用户(不加
-c,避免覆盖):sudo htpasswd /etc/nginx/auth/site-b.htpasswd bob
3. 注意作用域与继承规则
auth_basic 指令遵循 Nginx 配置继承机制,但只在当前上下文生效:
- 若在
server块中设置,整个该域名下的请求默认受保护(除非被内部location显式关闭) - 可在某个
location中用auth_basic off;关闭认证,例如开放/public路径 - 不要把
auth_basic_user_file写在http块里——否则所有 server 共享同一文件,失去“独立”意义
4. 测试与重载
配置完成后务必验证语法并重载:
-
检查配置是否正确:
sudo nginx -t -
重载使生效(不中断服务):
sudo nginx -s reload - 访问对应域名,浏览器应弹出认证框,输入对应用户名密码才可进入










