我正在使用Apache Reverse Proxy
,以下是一些Apache Virtual Host
配置:
ProxyRequests Off
<Proxy *>
AddDefaultCharset off
Order deny,allow
Allow from all
</Proxy>
ProxyVia On
ProxyRequests Off
ProxyPreserveHost On
proxyPass / ajp://127.0.0.1:8009/
现在我想以某种方式进行限制request url
,http://example.com/admin/tools
使其IP address
仅允许特定用户访问。我该如何实现这一点?
编辑:
根据上述要求这个答案工作正常,假设我想允许admin
从一个或两个访问 URL IP's
,其余的IP's
我想重定向到index
页面而不是显示forbidden error
,我该如何实现呢?
答案1
你使用的 Apache 版本是多少?一种基于 URL 限制资源访问的方法是使用
例如:
<Location /admin/tools>
Order Deny,Allow
Deny from all
Allow from 192.168.1.34
</Location>
答案2
根据上述要求,这个答案工作正常,假设我想允许从一个或两个 IP 访问管理 URL,其余 IP 我想重定向到索引页而不是显示禁止错误,我该如何得到这个?
扩展krist-van-besien 的回答,你可以借助ErrorDocument
for来实现403 禁止像这样:
<Location /admin/tools>
Order Deny,Allow
Deny from all
Allow from 192.168.1.34
ErrorDocument 403 /index.php
</Location>
请注意,用户应该有权限查看您要将其重定向到的页面。有关更多信息,您可以查看此问题:允许被屏蔽的 IP 查看 403 错误文档
进一步阅读:
答案3
扩展此场景以应用于 RESTful Web 服务端点,而不是从网页调用端点。
有没有办法代理来自本地服务器网页的请求并将其转发到 Web 服务地址,同时允许本地内部网络请求(开发人员)访问 Web 服务端点,但仍然限制直接外部 WS 端点请求?
例如,如果 Web 服务在 Tomcat(端口 8080)上运行,并且我们mod_proxy
在 Web 页面服务调用中使用端口 80 上的 Web 页面重定向 apache 请求 -> tomcat:8080/webservice。
<Location /admin/tools>
Order Deny,Allow
Deny from all
Allow from localhost
Allow from 127.0.0.1
Allow from *local.domain.com
</Location>
ProxyPass /admin/tools http://localhost:8080/admin/tools
ProxyPassReverse /admin/tools http://localhost:8080/admin/tools
当我尝试这个时,它会锁定整个 WS 端点访问,包括进入代理传递端点的网页请求。