如何解决ProxyPassReverse重定向时未保留正确的协议 发生了什么事?解决方案
我已经设置了一个Virtuoso服务器,该服务器使用内容协商为链接数据提供服务。该服务器通过反向代理Apache服务器提供服务,可以使用http
或https
来查询。
http://public.server.org/myapp --> http://private.local.domain:1234/
https://public.server.org/myapp --> http://private.local.domain:1234/
Virtuoso服务器随后执行内容协商并重定向到/describe?...
通过http
访问公共服务器时,我没有问题。发生重定向,并检索内容。
但是,当我通过https
访问公共服务器时,重定向会将我发送到http://public.server.org/describe?...
(即HTTP
,而不是HTTPS
)。
我希望将其重定向到https://public.server.org/describe?...
(使用与原始查询相同的协议)。
我的配置是:
<VirtualHost xxx.yyy.zzz.ttt:80>
ServerName public.server.org
ProxyPass /myapp http://localhost:8890/myapp
ProxyPassReverse /myapp http://localhost:8890/myapp
ProxyRequests Off
<Location /describe>
ProxyPass http://localhost:8890/describe
ProxyPassReverse /describe
</Location>
</VirtualHost>
<VirtualHost xxx.yyy.zzz.ttt:443>
ServerName public.server.org
ProxyPass /myapp http://localhost:8890/myapp
ProxyPassReverse /myapp http://localhost:8890/myapp
ProxyRequests Off
<Location /describe>
ProxyPass http://localhost:8890/describe
ProxyPassReverse /describe
</Location>
</VirtualHost>
apache是否有可能正确地重定向代理,以便在重定向时保持原始查询协议?
解决方法
使用dumpio
和Apache错误日志进行调试后,我认为我找到了问题。
发生了什么事?
首先,我的配置不正确。在我这里没有抄录的另一个地方,我有一个有效的ProxyPreserveHost On
指令。因此,该配置有效,但出于错误原因。
Apache保留了主机,Virtuoso使用了该主机。因此,当发送重定向到/describe...
时,Virtuoso重定向到http://
public.server.org
/describe...
,而不是我期望的http://
localhost:8890
/describe...
因此,ProxyPassReverse
指令未捕获重定向,并且重定向未更改地传递给客户端(并且可以工作)。问题在于,无论原始查询方案如何,重定向始终都是通过http
完成的。
解决方案
我决定放弃ProxyPreserveHost On
指令,并依靠正确的ProxyPassReverse
指令。
由于未知原因,我无法找出Location
内部的正确设置,因此我使用了以下设置:
<VirtualHost xxx.yyy.zzz.ttt:443>
ServerName public.server.org
ProxyPass /myapp http://localhost:8890/myapp
ProxyPassReverse /myapp http://localhost:8890/myapp
ProxyRequests Off
ProxyPreserveHost Off # To avoid problems if it is set On elsewhere.
ProxyPass /describe http://localhost:8890/describe
ProxyPassReverse /describe http://localhost:8890/describe
</VirtualHost>
注意:我只是更改了https
的设置,因为http
以某种方式起作用(因此http
virtualhost
仍使用{{ 1}},没有ProxyPreserveHost On
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。