跨多个虚拟主机的 apache 基本身份验证
apache basic auth across multiple virtualhosts
我有几个暂存站点作为服务器上的虚拟主机,还有几个面向 public 的虚拟主机站点。声明站点都在一个目录下(例如,/var/www/staging-sites/[site-document-root]
)。
到目前为止,我一直在为每个虚拟主机配置 HTTP 基本身份验证,但似乎应该有一种方法可以为所有虚拟主机配置一次。
问题“apache global basic auth”表明我可以将 Basic Auth 指令放在主 apache 配置文件的 <Directory /var/www/staging-sites>
容器中,但这样做不会导致浏览器提示输入凭据.
这是 tail -n 7 /etc/apache2/apache2.conf
的输出:
<Directory "/var/www/staging-sites/">
AuthType Basic
AuthName "Authentication Required"
AuthBasicProvider file
AuthUserFile /var/www/staging-sites/.htpasswd
Require valid-user
</Directory>
- 我已验证 /var/www/staging-sites/.htpasswd 存在,并且站点 foo.mydomain.com 使用文档根目录 /var/www/staging-sites/foo。
- 我已重新启动 apache 以确保加载新配置。
但是,当我打开 http://foo.mydomain.com 时,显示的站点没有提示输入基本身份验证凭据。
我做错了什么?
已解决。问题出在虚拟主机配置本身的这一部分:
<Directory /var/www/staging-sites/foo>
Require all granted
</Directory>
显然,所有虚拟主机都是使用等效配置创建的。正如所料,虚拟主机配置中的 Require all granted
优于全局配置中的 Require valid-user
。
删除该行可使上面配置的基本身份验证正常工作。
您也可以保留 Require all granted
但添加 Satisfy all
我有几个暂存站点作为服务器上的虚拟主机,还有几个面向 public 的虚拟主机站点。声明站点都在一个目录下(例如,/var/www/staging-sites/[site-document-root]
)。
到目前为止,我一直在为每个虚拟主机配置 HTTP 基本身份验证,但似乎应该有一种方法可以为所有虚拟主机配置一次。
问题“apache global basic auth”表明我可以将 Basic Auth 指令放在主 apache 配置文件的 <Directory /var/www/staging-sites>
容器中,但这样做不会导致浏览器提示输入凭据.
这是 tail -n 7 /etc/apache2/apache2.conf
的输出:
<Directory "/var/www/staging-sites/">
AuthType Basic
AuthName "Authentication Required"
AuthBasicProvider file
AuthUserFile /var/www/staging-sites/.htpasswd
Require valid-user
</Directory>
- 我已验证 /var/www/staging-sites/.htpasswd 存在,并且站点 foo.mydomain.com 使用文档根目录 /var/www/staging-sites/foo。
- 我已重新启动 apache 以确保加载新配置。
但是,当我打开 http://foo.mydomain.com 时,显示的站点没有提示输入基本身份验证凭据。
我做错了什么?
已解决。问题出在虚拟主机配置本身的这一部分:
<Directory /var/www/staging-sites/foo>
Require all granted
</Directory>
显然,所有虚拟主机都是使用等效配置创建的。正如所料,虚拟主机配置中的 Require all granted
优于全局配置中的 Require valid-user
。
删除该行可使上面配置的基本身份验证正常工作。
您也可以保留 Require all granted
但添加 Satisfy all