我在 Karaf 托管的应用程序前部署 Apache(Apache 和 Karaf 在不同的服务器上)。我希望 Apache 作为反向代理运行并隐藏部分 URL。
直接从应用服务器获取应用登录页面的 URL 是http://app-server:8181/jellyfish. 页面由在 Karaf 中运行的 Jetty 实例提供服务。当然,这种行为通常会被防火墙阻止,除了反向代理服务器。
在关闭防火墙的情况下,如果您点击此 URL,则 Jetty 会加载登录页面。浏览器的地址栏正确更改为http://app-server:8181/jellyfish/login?0,一切正常。
我想要的是http://web-server(即从根)映射到应用程序服务器上的 Jetty,应用程序的名称 ( jellyfish) 被抑制。例如,浏览器将更改为显示http://web-server/login?0在地址栏中,并且所有后续 URL 和内容都将使用网络服务器的域提供服务,而不会出现jellyfish混乱。
我可以使用以下配置(代码段)让 Apache 作为简单的反向代理运行:-
ProxyPass /jellyfish http://app-server:8181/jellyfish
ProxyPassReverse / http://app-server:8181/
Run Code Online (Sandbox Code Playgroud)
...但这需要浏览器的 URL 包含jellyfish并转到根 URL ( http://web-server) 会给出 404 Not Found。
我花了很多时间尝试使用mod_rewrite和不使用它的[P]标志来解决这个问题,但没有成功。然后我尝试了该ProxyPassMatch指令,但我似乎也无法完全正确。
这是当前配置,已加载到/etc/apache2/sites-available/Web 服务器上。请注意,有一个本地托管的图像目录。我还保留了mod_rewrite 代理漏洞利用保护,并抑制了一些mod_security会产生误报的规则。
<VirtualHost *:80> …Run Code Online (Sandbox Code Playgroud)