我一直在尝试在一个主网站上设置一个反向代理到url格式的博客网站
example.com/blog -> blog.example.com
example.com/blog在Apache实例上,在httpd.conf
中我添加了以下内容:
SSLProxyEngine on
ProxyPreserveHost Off
ProxyRequests Off
ProxyPassMatch /blog https://blog.example.com
ProxyPassReverse /blog https://blog.example.com
这一切都工作,但它一直404。好消息是它实际上是正确的反向代理,因为它抓取了博客的404页。
查看apache访问日志后,我发现它正在将子路径/blog
传递给blog.example.com
,因此它正在获取blog.example.com/blog
。当用户导航到/blog
时,它自然会做404。然而,我的理解是,当设置ProxyPassReverse
时,它会根据指定的内容发出请求,因此在我上面的情况下,它应该请求blog.example.com
,而不是在最后传递/blog
。
下面是文档中的代码片段,它确认了上面的工作方式:
例如,假设本地服务器的地址为http://example.com/;
ProxyPass /mirror/foo/ http://backend.example.com/
ProxyPassReverse /mirror/foo/ http://backend.example.com/
ProxyPassReverseCookieDomain backend.example.com public.example.com
ProxyPassReverseCookiePath / /mirror/foo/
不仅会导致对http://example.com/mirror/foo/bar的本地请求在内部转换为对http://backend.example.com/bar的代理请求(ProxyPass在这里提供的功能)。
知道为什么会这样吗?最坏的情况下,我可能会尝试添加重定向或重写,以便/blog
进入主页,但我确实有我的永久链接设置在这样一种方式,/blog
是在文章的段塞中。
我使用Apache 2.2.
我是个白痴。我使用ProxyPassMatch
而不是ProxyPass
。嗯。