2017-09-06 142 views
0

我正在尝试配置Apache服务器以使2个子域使用反向代理。我可以将流量重定向到第一个子域(first.example.com),并成功从https站点检索内容。但是,每当我尝试访问第二个子域时,我最终都会从第一个子域中获取内容,并且由于路由与我的本地网站不匹配,所以我找到了一个未找到的页面。Apache反向代理配置 - 子域名

我想知道我可以从当前配置中调整什么,以便我可以从我的本地主机站点获取内容。

这里是我当前的配置:

<Proxy *> 
Require all granted 
</Proxy> 

SSLProxyEngine On 
ProxyRequests Off 
SSLProxyCheckPeerCN off 
SSLProxyCheckPeerExpire off 
SSLInsecureRenegotiation on 
SSLProxyVerify none 
SSLVerifyClient none 
SSLProxyCheckPeerName off 

<VirtualHost first.example.com:80> 
    ServerName first.example.com 
    ProxyPass /first https://stackoverflow.com 
    ProxyPassReverse /first https://stackoverflow.com 
    ProxyPassMatch ^/(.*)$ https://stackoverflow.com/$1 

</VirtualHost> 

<VirtualHost second.example.com:80> 
    ServerName second.example.com 
    ProxyPass /site http://localhost/site 
    ProxyPassReverse /site http://localhost/site 
    ProxyPassMatch ^/(.*)$ http://localhost/site/$1 
</VirtualHost> 

非常感谢你提前!

最好的问候!

EdgarMartínez。

回答

0

您当前的配置与自身冲突。 ProxyPassProxyPassMatch做同样的事情(在正则表达式中),但你用不同的规则声明它。

ProxyPass /site http://localhost/site 

法则说:任何人访问http://second.example.com/site将从http://localhost/site送入内容。如果您访问http://second.example.com/foo,您什么也得不到。

匹配线

ProxyPassMatch ^/(.*)$ http://localhost/site/$1 

法则说:任何人都该访问http://second.example.com/site将从http://localhost/site/site送入内容。如果您访问http://second.example.com/foo,则会得到http://localhost/site/foo

如果您使用Match版本(正则表达式),对于没有正则表达式版本的反向规则而言,您的运气也不好。虽然,我不确定你是否真的需要反向规则。

至于为什么你的第二个请求得到了第一个结果...我不知道。

+0

你好@Grumpy, 你说得对,我的配置与自身冲突。 这是我如何改变它: '了NameVirtualHost *:80' '<虚拟主机*:80>'' 服务器名first.example.com' '的DocumentRoot “F:/根/ HTMLDOCS”'' ' '<虚拟主机*:80>'' ProxyPreserveHost on' '服务器名second.example.com' '的ProxyPass “/” “https://stackoverflow.com/”'' ProxyPassReverse“ /“”https://stackoverflow.com/“' '' 感谢您花时间回答我的问题。 –