我想配置 Apache (2.2) 来限制用户可以访问的域,例如,如果 apache FQDN 是 myapache.myfunnydomain.com,那么 apache 将只允许对 .myfunnydomain.com 中的资源的请求(或我配置为合法的任何域)并拒绝所有其他请求(重定向到错误页面)
用例是:
- 用户尝试访问受限资源
- 我使用 OpenAm / OpenAm policyAgent 进行身份验证(PolicyAgent 安装为监听所有流量的 Apache 模块)
- OpenAm policyAgent 模块拦截此操作并将用户重定向到登录页面
- 此登录页面的 URL 格式为 www.loginpage.com/?goto=originallyrequestedresource.com
- 一旦用户按下登录按钮,此 POST 就会转到并行 OpenAM 系统
- 一旦 OpenAM 进行身份验证,它就会使用此 goto 将用户重定向到“goto”的值(使用 302)
- 我想确保用户永远不会被重定向到我允许的域之外的域
例如,如果有人入侵系统并设法更改 goto 的值,那么 apache 将不允许此请求成功
答案1
创建 vhost.. vhost 的顺序很重要..如果没有匹配的 vhost,则提供第一个 vhost。
看一眼http://httpd.apache.org/docs/2.2/vhosts/name-based.html
创建类似的东西
NameVirtualHost *:80
<VirtualHost *:80>
ServerName dummy.domain.tld
ServerAlias domain.tld *.domain.tld
DocumentRoot /www/domain/dummy
</VirtualHost>
<VirtualHost *:80>
ServerName www.domain.tld
DocumentRoot /www/otherdomain
</VirtualHost>
让第一个 vhost 成为一个 catch-all vhost..(无论请求如何,如果它被访问则重定向到错误页面)
然后后续的 vhost 可以是响应特定 fqdn 的特定 vhost......
在上面的例子中,所有与“wwww.domain.tld”不匹配的请求将由第一个虚拟主机提供服务....
您可能还想阅读 serverAlias 指令http://httpd.apache.org/docs/2.2/mod/core.html#serveralias
- 希望这可以帮助...