反向代理中的Apache URL重写
我将Apache部署在Karaf托管的应用程序之前(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和内容都将由Web服务器的域提供,而不会造成jellyfish混乱。 我可以使用以下配置(代码段)将Apache用作简单的反向代理:- ProxyPass /jellyfish http://app-server:8181/jellyfish ProxyPassReverse / http://app-server:8181/ ...但是这需要浏览器的URL包含在内jellyfish,转到根URL(http://web-server)会显示404 Not Found。 我花了很多时间尝试使用mod_rewrite带有和不带有它的[P]标志的方法来解决这个问题,但是没有成功。然后ProxyPassMatch,我尝试了该指令,但似乎也无法完全正确。 这是当前配置,已加载到/etc/apache2/sites-available/Web服务器上。请注意,这里有一个本地托管的图像目录。我还保留了mod_rewrite代理漏洞利用保护,并抑制了一些mod_security会带来误报的规则。 <VirtualHost *:80> ServerAdmin admin@drummer-server ServerName drummer-server ErrorLog ${APACHE_LOG_DIR}/error.log LogLevel warn CustomLog ${APACHE_LOG_DIR}/access.log combined Alias /images/ "/var/www/images/" RewriteEngine On RewriteCond %{REQUEST_URI} !^$ RewriteCond %{REQUEST_URI} !^/ RewriteRule .* - [R=400,L] ProxyPass /images ! ProxyPassMatch ^/(.*) http://granny-server:8181/jellyfish/$1 …