2009-02-20 5 views
3

В результате horrible, horrible errors мы изменили способ подключения Apache к Tomcat. Мы использовали mod_jk:Использование ProxyPass для страниц, но не изображений

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> или что-то в этом роде?

ответ

5

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

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

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

+0

Возникают ли последствия использования регулярного выражения? –

+0

Регулярное выражение имеет некоторые проблемы с производительностью, когда у вас есть сверхкомплексные выражения. Для такого регулярного выражения все в порядке. – kmkaplan

1

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

SetEnv force-proxy-request-1.0 1 
SetEnv proxy-nokeepalive 1 
+0

Можете ли вы объяснить, что они делают? –

+0

отключается, поддерживает соединения и делает запрос с использованием http 1.0 вместо 1.1 – jlintz

+0

Исправить. Я считаю, что исходные сообщения об ошибках, где есть симптом другой проблемы, но я получал их как на внутренних, так и на сторонних приложениях на одном экземпляре tomcat. Так или иначе, эти изменения очистили журнал ошибок. –

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 сбивал с толку.

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

Смежные вопросы