我有一个 Tomcat 6 实例,由于多次 WAR 部署后的 PermGen 问题,它经常需要重新启动。
在生产环境中,关闭网站显然是不好的做法,除了连接失败外,任何访问者都一无所获。大局是设置一个或两个以上实例的故障转移 Tomcat 集群,但现在我想要一个简单的解决方案:
当 Tomcat 关闭时,所有请求都会转发到运行 1 个简单的“站点正在维护”类型页面的 Apache HTTP 服务器。
我假设我需要一些小型、超快速的代理来坐在 Tomcat 前面,为它提供请求并监控它的健康状况。如果它死了,它只是将这些请求发送到 Apache HTTP。
想法?
最佳答案
您通常可以在安装 tomcat 之前使用 Apache。为您的 tomcat 设置重定向代理规则。如果这不起作用,apache 将发送“503 服务暂时不可用”,您可以将其配置为您的维护页面。
apache 应用程序文件看起来有点像这样
<VirtualHost *>
ServerName example.com
ServerAlias *.example.com
ServerAdmin admin@example.com
RewriteEngine on
RewriteRule ^/static/(.*) /some/path/for/static/files/static/$1 [L]
RewriteRule ^(.*) http://127.0.0.1:8080$1 [P]
ErrorLog /var/log/apache2/example/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/example/access.log combined
ServerSignature On
ErrorDocument 503 /static/site_down.html
</VirtualHost>
第一个重写规则将某个 URI (/static/) 下面的所有文件更改为一个目录,这些静态文件直接从该目录提供而无需代理。您也可以使用它来为您网站的所有静态资源提供服务,这将在一定程度上弥补在您的 tomcat 前面安装 apache 的一般(小)性能损失。
ErrorDocument 指令更改了对该静态路径中的文档 site_down.html 的正常 503 响应。
为此,您需要启用 mod_rewrite 和 mod_proxy/mod_proxy_http 以及 在您的 apache2 配置中启用代理
<Proxy *>
Order Deny,Allow
Deny from all
Allow from all
</Proxy>
关于tomcat - 使用 Apache HTTP 实例支持 Tomcat 的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/765284/