Usando ProxyPass para páginas pero no las imágenes
Pregunta
Como resultado de horrible, horribles errores , estamos hemos cambiado la forma en que nos conectamos Apache Tomcat. Estábamos usando mod_jk
:
JkMount /path ajp13
Ahora estamos utilizando mod_proxy_ajp
:
ProxyPass /path ajp://localhost:8009/path
ProxyPassReverse /path ajp://localhost:8009/path
Sin embargo, hay una característica que JkMount
ofrecido pero ProxyPass
no: la capacidad de seleccionar el tipo de archivos. Esto hizo posible que los archivos html de proxy, pero no imágenes - en otras palabras, para permitir que el buen rápido Apache servir el material estático, y recurrir a la lenta Tomcat sólo para el material dinámico
JkMount /*.html ajp13
¿Hay alguna manera de lograr esto con ProxyPass
? Posiblemente usando una directiva <Location>
circundante o algo por el estilo?
Solución
ProxyPassMatch ^/(path/.*\.html)$ ajp://localhost:8009/$1
Editado: corrección de Marcus Downing
Otros consejos
No es su problema, pero algo a tener en cuenta para el uso de esta configuración. Durante el uso de mod_proxy Apache Tomcat para conectarse a mi registro de errores mostraba cayó conexiones bajo carga moderada. La adición de este a httpd.conf resuelto mis problemas.
SetEnv force-proxy-request-1.0 1
SetEnv proxy-nokeepalive 1
El post de kmkaplan es la respuesta correcta, pero me dio el error:
Syntax error on line 32 of .../httpd-vhosts.conf:
ProxyPass Unable to parse URL
Se trabajó cuando cambié la directiva para que diga:
ProxyPathMatch ^/(path/.*\.html)$ ajp://localhost:8009/$1
Sólo puedo suponer que la introducción del $1
justo al lado del número de puerto 8009
estaba confundiendo a él.
Usamos el siguiente para permitir que Apache sirven a las imágenes y ajuste razonable expira cabeceras:
<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>
Sin embargo, como se puede ver, almacenamos las imágenes fuera de nuestra aplicación Tomcat. No sé si también funciona para las imágenes dentro de la aplicación.