3

由于可怕的、可怕的错误,我们改变了将 Apache 连接到 Tomcat 的方式。我们正在使用mod_jk

JkMount /path ajp13

现在我们正在使用mod_proxy_ajp

ProxyPass /path ajp://localhost:8009/path
ProxyPassReverse /path ajp://localhost:8009/path

但是,有一个功能JkMount提供但ProxyPass不提供:选择文件类型的能力。这使得代理 html 文件成为可能,但不能代理图像 - 换句话说,让快速的 Apache 为静态的东西提供服务,而只为动态的东西使用慢速的 Tomcat。

JkMount /*.html ajp13

有什么办法可以做到这一点ProxyPass吗?可能使用周围的<Location>指令或类似的东西?

4

4 回答 4

5

使用ProxyPassMatch

ProxyPassMatch ^/(path/.*\.html)$ ajp://localhost:8009/$1

编辑:马库斯唐宁的更正

于 2009-02-20T15:29:52.147 回答
1

不是您的问题,而是使用此配置需要注意的事项。在使用 apache mod_proxy 连接到 tomcat 时,我的错误日志显示在中等负载下连接断开。将此添加到 httpd.conf 解决了我的问题。

SetEnv force-proxy-request-1.0 1
SetEnv proxy-nokeepalive 1
于 2009-02-20T15:38:13.327 回答
1

kmkaplan 的帖子是正确的答案,但它给了我错误:

Syntax error on line 32 of .../httpd-vhosts.conf:
ProxyPass Unable to parse URL

当我将指令更改为:

ProxyPathMatch ^/(path/.*\.html)$ ajp://localhost:8009/$1

我只能假设将$1右侧放在端口号旁边会8009混淆它。

于 2009-02-20T23:08:12.107 回答
0

我们使用以下内容让 Apache 提供图像并设置合理的过期标头:

<Virtualhost *:80>
    ServerName domain.com
    ServerAlias *.domain.com

    Alias /img/ /var/www/domain/img/
    <Directory /var/www/domain/img/>
        ExpiresActive On
        ExpiresByType image/gif "access plus 1 months"
        ExpiresByType image/jpg "access plus 1 months"
        ExpiresByType image/jpeg "access plus 1 months"
        ExpiresByType image/png "access plus 1 months"
        ExpiresByType image/x-icon "access plus 1 months"
        ExpiresByType image/ico "access plus 1 months"
        # This will prevent apache from having to check for a .htaccess file on each request.
        AllowOverride None
        # Allow symlinks. Otherwise, apache will make a separate call on each filename to ensure it is not a symlink.
        Options +FollowSymLinks -SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>

    ProxyRequests Off
    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>

    # Prevent domain.com/img from being served by Tomcat
    ProxyPass /img !

    # Pass all other requests to Tomcat
    ProxyPass / ajp://localhost:8009/

    # 1. Note that usually no ProxyPassReverse directive is necessary. The AJP request includes
    #    the original host header given to the proxy, and the application server can be expected to
    #    generate self-referential headers relative to this host, so no rewriting is necessary. 
    # 2. If you still want to use it, read this first:
    #    http://www.humboldt.co.uk/2009/02/the-mystery-of-proxypassreverse.html
    # ProxyPassReverse / http://domain.com/
</Virtualhost>

但是,如您所见,我们将图像存储在 Tomcat 应用程序之外。我不知道它是否也适用于应用程序内的图像。

于 2013-04-15T01:54:16.437 回答