3

我有一个 Tomcat 6 实例,由于多次 WAR 部署后的 PermGen 问题,该实例经常需要重新启动。

在生产环境中,关闭站点显然是不好的做法,只会让任何访问者连接失败。大局是设置一个或两个以上实例的故障转移 Tomcat 集群,但现在我想要一个简单的解决方案:

当 Tomcat 关闭时,所有请求都被转发到运行 1 个简单的“站点正在维护”类型页面的 Apache HTTP 服务器。

我假设我需要一些小型、超快速的代理来坐在 Tomcat 前面,为它提供请求并监控它的运行状况。如果它死了,它只是将这些请求发送到 Apache HTTP。

想法?

4

1 回答 1

4

您通常可以在安装 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 指令将正常的 503 响应更改为位于此静态路径中的文档 site_down.html。

为此,您需要启用 mod_rewrite 和 mod_proxy/mod_proxy_http 并在 apache2 配置中启用代理

<Proxy *>
        Order Deny,Allow
        Deny from all
        Allow from all
</Proxy>
于 2009-04-19T12:13:42.863 回答