Использование ProxyPass для страниц, но не для изображений - PullRequest
3 голосов
/ 20 февраля 2009

В результате ужасных, ужасных ошибок мы изменили способ подключения 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 ]

5 голосов
/ 20 февраля 2009

Использование ProxyPassMatch :

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

Отредактировано: исправление Маркуса Даунинга

1 голос
/ 21 февраля 2009

Пост kmkaplan - правильный ответ, но он дал мне ошибку:

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

Это сработало, когда я изменил директиву на:

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

Я могу только предположить, что размещение $1 рядом с номером порта 8009 сбило его с толку.

1 голос
/ 20 февраля 2009

Не ваша проблема, но стоит обратить внимание на использование этой конфигурации. При использовании apache mod_proxy для подключения к tomcat в моем журнале ошибок отображались сбойные соединения при умеренной нагрузке. Добавление этого к httpd.conf решило мои проблемы.

SetEnv force-proxy-request-1.0 1
SetEnv proxy-nokeepalive 1
0 голосов
/ 15 апреля 2013

Мы используем следующее, чтобы Apache обслуживал изображения и устанавливали разумные заголовки expires:

<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. Я не знаю, работает ли это также для изображений внутри приложения.

...