我有一个 Apache 反向代理,目前正在为几个站点进行反向代理。但是,我现在要添加一个只能由某些 IP 访问的新站点(我们称之为 newsite.com)。使用 Apache 作为反向代理是否可行?
我将 VirtualHosts 用于正在代理的站点。我曾尝试将 Allow/Deny 指令与 Location 语句结合使用。例如:
<VirtualHost *:80>
Servername newsite.com
<Location http://newsite.com>
Order Deny,Allow
Deny from all
Allow from x.x.x.x
</Location>
<IfModule rewrite_module>
RewriteRule ^/$ http://newsite.internal.com [proxy]
</IfModule>
Run Code Online (Sandbox Code Playgroud)
我还尝试在代理指令中为站点配置允许/拒绝,例如
<Proxy http://newsite.com/>
Order deny,allow
Deny from all
Allow from x.x.x.x
</Proxy>
Run Code Online (Sandbox Code Playgroud)
但是,对于其余的代理站点,我仍然有这个定义。
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
Run Code Online (Sandbox Code Playgroud)
无论我做什么,它似乎都可以从任何地方访问。这是因为所有其他代理站点的定义。是否有应用代理指令的顺序。我在 * 之前和之后都有 newsite ,也在 VirtualHost 声明中。
小智 5
您正在使用ServerName和ServerAlias来匹配newsite.com。
您不应该将以下指令用于反向代理配置:
<Proxy whatever>
Run Code Online (Sandbox Code Playgroud)
你应该使用:
对于阿帕奇 2.2:
<Location />
Order Deny,Allow
Deny from all
Allow from x.x.x.x
</Location>
Run Code Online (Sandbox Code Playgroud)
对于阿帕奇 2.4:
<Location />
<RequireAny>
Require ip x.x.x.x/255.255.255.0
Require ...
</RequireAny>
</Location>
Run Code Online (Sandbox Code Playgroud)
完成 Authz 后,您只需执行 ProxyPass 和 ProxyPassReverse(对于 302,301 重定向):
ProxyPass / http://newsite.com/
ProxyPassReverse / http://newsite.com/
Run Code Online (Sandbox Code Playgroud)
请记住,您需要将 newsite.com 添加到您的 /etc/hosts 中,或者 dns 应该解析 url 中的主机。您也可以仅使用 IP 地址,但您应该指示 httpd 服务器保留“Host:”标头:
ProxyPreserveHost On
Run Code Online (Sandbox Code Playgroud)
小智 1
今天有类似的问题;与通配符匹配的完成方式有关,我认为它使用完整的 URL:在我的例子中,我有
<Proxy /jira*>
Order allow,deny
Deny from all
</Proxy>
ProxyPass /jira https://myhost.com
Run Code Online (Sandbox Code Playgroud)
但这不起作用。可以从任何地方访问该网站。我尝试了一些事情并找到了一个工作版本:
<Proxy *jira*>
Run Code Online (Sandbox Code Playgroud)
所以在你的情况下尝试
<Proxy http://newsite.com*>
Run Code Online (Sandbox Code Playgroud)
确保 apache 与该 url 匹配。
归档时间: |
|
查看次数: |
14721 次 |
最近记录: |