Apache 反向代理访问控制

Apache 反向代理访问控制

我有一个 Apache 反向代理,目前正在为一些网站提供反向代理。但是我现在要添加一个新网站(我们称之为 newsite.com),该网站只能由某些 IP 访问。使用 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>

我还尝试在代理指令中为网站专门配置允许/拒绝,例如

<Proxy http://newsite.com/>
  Order deny,allow
  Deny from all
  Allow from x.x.x.x
</Proxy>

但是,对于其余的代理站点,我仍然有这个定义。

<Proxy *>
  Order deny,allow
  Allow from all
</Proxy>

无论我做什么,它似乎都可以从任何地方访问。这是因为所有其他代理站点的定义。它应用代理指令的顺序是什么?我在 * 之前和之后都有 newsite,在 VirtualHost 语句中也有。

答案1

您正在使用服务器名称服务器别名用于匹配新闻网站。

你应该不是使用反向代理配置指令:

<Proxy whatever>

你应该使用:

对于 Apache 2.2:

<Location />
Order Deny,Allow
Deny from all
Allow from x.x.x.x
</Location>

对于 Apache 2.4:

<Location />
   <RequireAny>
       Require             ip x.x.x.x/255.255.255.0
       Require ...
   </RequireAny>
</Location>

完成 Authz 后,您只需执行 ProxyPass 和 ProxyPassReverse(用于 302,301 重定向):

ProxyPass /  http://newsite.com/
ProxyPassReverse /  http://newsite.com/

请记住,您需要将 newsite.com 添加到您的 /etc/hosts 中,或者 DNS 应解析 URL 中的主机。您也可以仅使用 IP 地址,但您应该指示 httpd 服务器使用以下命令保留“Host:”标头:

ProxyPreserveHost On

答案2

今天遇到了类似的问题;与通配符匹配的方式有关,我认为它使用了完整的 URL:就我而言

<Proxy /jira*>
  Order allow,deny
  Deny from all
</Proxy>
ProxyPass /jira https://myhost.com

但这不起作用。网站可以从任何地方访问。我尝试了几种方法,找到了一个可用的版本:

<Proxy *jira*>

因此,在你的情况下尝试

<Proxy http://newsite.com*>

以确保 apache 匹配该 url。

答案3

<VirtualHost *:80>
    Servername newsite.com

    <Proxy *>
            Order Deny,Allow
            Deny from all
            Allow from x.x.x.x
    </Proxy>

    ProxyPass /  http://newsite.com/
    ProxyPassReverse /  http://newsite.com/

</VirtualHost>

相关内容