在过去 ,将Apache HTTP服务器置于Java应用程序服务器或Java应用程序本身的前面是很常见的事情。
其背后的原因非常简单,可以以简单的方式添加缓存,还可以添加负载平衡,并且在此静态内容之上可以由Apache HTTP提供服务,而所有其他请求可以由Java应用程序提供服务。
尽管此设置不是新功能,但我仍然会定期遇到它,并且看到很多人仍然对如何设置此设置有疑问。
假设您要拦截对静态文件的所有请求并从硬盘驱动器提供服务,而所有其他请求都需要传递给Tomcat。
安装Apache HTTP服务器后,下一步是添加特定模块
- mod_proxy
- mod_proxy_http
- mod_rewrite
在某些系统上,可以通过这种方式完成
$ a2enmod rewrite $ a2enmod proxy $ a2enmod proxy_http
之后,需要更新Apache HTTP服务器的此配置文件。 找到conf文件
<VirtualHost *: 80 > ....... </VirtualHost>
添加重写规则,该规则将拦截对静态的所有调用并将其更改为从硬盘提供服务
# rewrite from static # rewrite from to it shark static RewriteEngine on RewriteRule ^/ static /(.+) /itshark/$ 1 [L,PT] Alias "/itshark" "/location/on/disk"
这样,我们对Apache HTTP说,所有以/ static开头的URL请求都应重写为/ itshark /
之后,我们说所有对/ itshark的请求应从/ location / on / disk提供 。 我们还需要将此部分添加到配置中,以便Apache HTTP能够访问它。
<Directory "/location/on/disk" > Options None AllowOverride None Require all granted </Directory>
根据您的操作系统和Apache HTTP版本,此文件应位于主conf文件中(例如:/etc/apache2/apache2.conf)或VirtualHost的conf文件中(例如:/ etc / apache2 / sites-enabled / 000- default.conf)。
文件名和位置取决于系统和Apache HTTP版本
现在剩下的就是将所有其余流量发送到Apache Tomcat。
为此,我们需要将此添加到VirtualHost conf文件中
ProxyPassMatch ^/(itshark)/.*$ ! ProxyPass / http: //localhost:8080/ connectiontimeout=300 timeout=300 retry=3 ProxyPreserveHost On ProxyVia On
就是这样。 对/ static /的所有请求将最终在/ location / on / disk /中 ,而其他所有请求都将发送到Apache Tomcat。
翻译自: https://www.javacodegeeks.com/2019/03/java-behind-apache-http-server.html