我有一个Apache反向代理,目前反向代理几个网站。 不过,我现在要添加一个新的网站(让我们称之为newsite.com)应该只能由某些IP访问。 这是可以使用Apache作为反向代理吗?
我使用VirtualHosts为正在被代理的网站。 我已经尝试使用允许/拒绝指令结合位置语句。 例如:
<VirtualHost *:80> Servername newsite.com <Location http://newsite.com> Order Deny,Allow Deny from all Allow from xxxx </Location> <IfModule rewrite_module> RewriteRule ^/$ http://newsite.internal.com [proxy] </IfModule>
例如,我也尝试在Proxy指令中特别为站点configuration允许/拒绝
<Proxy http://newsite.com/> Order deny,allow Deny from all Allow from xxxx </Proxy>
但是,对于其他代理站点,我仍然有这个定义。
<Proxy *> Order deny,allow Allow from all </Proxy>
无论我做什么,似乎都可以从任何地方访问。 这是因为所有其他代理站点的定义。 有没有一个命令,它适用于代理指令。 我在*之前和之后都有一个newsite,也在VirtualHost声明中。
您正在使用ServerName和ServerAlias来匹配newsite.com。
您不应该使用指令的反向代理configuration:
<Proxy whatever>
你应该使用:
对于Apache 2.2:
<Location /> Order Deny,Allow Deny from all Allow from xxxx </Location>
对于Apache 2.4:
<Location /> <RequireAny> Require ip xxxx/255.255.255.0 Require ... </Location>
完成Authz之后,您只需执行ProxyPass和ProxyPassReverse(用于302,301redirect):
ProxyPass / http://newsite.com/ ProxyPassReverse / http://newsite.com/
请记住,这需要将newsite.com添加到/ etc / hosts中,否则dns应该parsingurl中的主机。 您也可以只使用IP地址,但您应该指示保留“主机:”标题的httpd服务器:
ProxyPreserveHost On
今天有类似的问题; 与通配符匹配是如何完成的,我认为它使用完整的URL:在我的情况下,我有
<Proxy /jira*> Order allow,deny Deny from all </Proxy> ProxyPass /jira https://myhost.com
这不起作用。 网站可以从任何地方访问。 我尝试了一些事情,发现一个工作版本:
<Proxy *jira*>
所以在你的情况下尝试
<Proxy http://newsite.com*>
确保Apache匹配该url。
<VirtualHost *:80> Servername newsite.com <Proxy *> Order Deny,Allow Deny from all Allow from xxxx </Proxy> ProxyPass / http://newsite.com/ ProxyPassReverse / http://newsite.com/ </VirtualHost>