Utilizzando ProxyPass per le pagine, ma non le immagini
Domanda
A seguito di orribile, errori orribili , noi' ve cambiato il modo in cui colleghiamo Apache Tomcat. Stavamo usando mod_jk
:
JkMount /path ajp13
Ora stiamo usando mod_proxy_ajp
:
ProxyPass /path ajp://localhost:8009/path
ProxyPassReverse /path ajp://localhost:8009/path
Tuttavia, c'è una caratteristica che JkMount
offerto ma ProxyPass
non lo fa: la possibilità di selezionare il tipo di file. Ciò ha permesso di file html del proxy, ma non le immagini - in altre parole, lasciare che il bel veloce Apache servire la roba statica, e ricorrendo alla Tomcat lento solo per la roba dinamica
JkMount /*.html ajp13
C'è un modo per ottenere questo risultato con ProxyPass
? Possibilmente utilizzando una direttiva <Location>
circostante o qualcosa del genere?
Soluzione
ProxyPassMatch ^/(path/.*\.html)$ ajp://localhost:8009/$1
A cura: la correzione di Marcus Downing
Altri suggerimenti
Non è il problema, ma qualcosa di guardare fuori per l'utilizzo di questa configurazione. Durante l'utilizzo di apache mod_proxy per connettersi a Tomcat mia log degli errori stava mostrando caduto connessioni sotto carico moderato. L'aggiunta di questo al httpd.conf risolto i miei problemi.
SetEnv force-proxy-request-1.0 1
SetEnv proxy-nokeepalive 1
Il post di kmkaplan è la risposta giusta, ma mi ha dato l'errore:
Syntax error on line 32 of .../httpd-vhosts.conf:
ProxyPass Unable to parse URL
Ha funzionato quando ho cambiato la direttiva di leggere:
ProxyPathMatch ^/(path/.*\.html)$ ajp://localhost:8009/$1
posso solo supporre che mettere il $1
proprio accanto al numero di porta è stato 8009
confondendolo.
Usiamo la seguente lasciare Apache servire le immagini e impostare ragionevole scade intestazioni:
<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>
Tuttavia, come si può vedere, abbiamo memorizzare le immagini al di fuori della nostra applicazione Tomcat. Non so se funziona anche per le immagini all'interno dell'applicazione.