我正在尝试允许Amazon CDN访问受密码保护的登台站点上的资源(HTTP基本身份验证)。 这是我在httpd.conf文件中的代码:
NameVirtualHost *:80
<VirtualHost *:80>
ServerName staging.domain.com
DocumentRoot /var/www/html
<Directory "/var/www/html/">
Options Indexes MultiViews FollowSymLinks
AllowOverride all
AuthName "Development Access"
AuthType Basic
AuthUserFile /path/to/password.htpasswd
Require valid-user
SetEnvIf User-Agent "^Amazon.*" cdn
Order allow,deny
Allow from env=cdn
</Directory>
</Virtualhost>
我正在使用SetEnvIf
分配一个变量,如果用户代理是亚马逊,然后只是允许它,但这不起作用。有人可以帮我解决这个问题吗?
答案 0 :(得分:3)
问题是需要有效的用户才能访问内容,对所使用的用户代理无动于衷。
给这个article in the Apache Manual a read,特别是看看RequireAny位。这允许您设置具有所需复杂性的规则。您的配置代码看起来像这样。
SetEnvIf User-Agent "^Amazon.*" cdn
<RequireAny>
Require valid-user
Require cdn
</RequireAny>
这仅适用于Apache 2.4以上版本。在2.2上,您可以查看Apache Wiki中的this article,特别是Satisfy Any指令。希望这会有所帮助。
答案 1 :(得分:1)
如果你有Apache 2并且可能需要使用HTTP Auth访问资源,这对我有用:
<Directory /var/www/yourwebdirectory>
SetEnvIf User-Agent "^Amazon.*" cdn
AuthUserFile /etc/apache2/.htpasswd.forthissite
AuthType Basic
AuthName "My Files"
Require valid-user
Order allow,deny
Allow from env=cdn
Satisfy Any
</Directory>