Apache + Tomcat: używanie proxy mod zamiast AJP

Czy Jest jakiś sposób, aby połączyć Apache z Tomcat za pomocą proxy HTTP, tak, że Tomcat dostaje poprawną nazwę przychodzącego hosta, a nie localhost? Używam tej dyrektywy w apache:

ProxyPass /path http://localhost:8080/path

Ale pojawia się jako localhost, co jest bezużyteczne, gdy mamy kilka stron na tym samym serwerze. Mogę ustawić host ręcznie w konfiguracji serwera:

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           proxyName="pretend.host" proxyPort="80" />

Ale to znowu nie służy więcej niż jednej stronie. I nie podoba mi się pomysł użycia innego portu wewnętrznego dla każdego site, to brzmi naprawdę brzydko.

Czy nie ma możliwości przeniesienia portu, gdy go proxy?

(Jeśli pytasz, dlaczego nie używam AJP, odpowiedź brzmi ten błąd. Staram się wszystko, co mogę, zanim zrezygnuję z Tomcat i Apache całkowicie )

Author: Community, 2009-06-05

3 answers

Ustawienia, których szukasz to:

<VirtualHost *:80>
  ServerName public.server.name

  ProxyRequests Off
  ProxyPreserveHost On

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

  ProxyPass / http://localhost:8080/
  ProxyPassReverse / http://localhost:8080/
</VirtualHost>

Zauważ, że używamy localhost jako celu proxy. Możemy to zrobić, ponieważ włączamy ProxyPreserveHost . Dokumentacja stwierdza, że

Jest głównie przydatny w specjalnych konfiguracjach, takich jak proxied Mass name-based virtual hosting, gdzie oryginalny nagłówek hosta musi zostać oceniony przez serwer zaplecza.

Co brzmi dokładnie jak to, co robisz.
 38
Author: Robert Munteanu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-07 22:05:02

Myślę, że najlepszym rozwiązaniem, jeśli chcesz wiele witryn na tym samym serwerze, jest użycie wirtualnych hostów w konfiguracji Apache. Oto przykład:

<VirtualHost *:80>
ServerName server.domain.com

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

ProxyPass / http://server.domain.com:8080/
ProxyPassReverse / http://server.domain.com:8080/
<Location />
    Order allow,deny
    Allow from all
</Location>

As long as you have server.domain.com zarejestrowany w zewnętrznym DNS, Nazwa przychodzącego hosta będzie wyświetlana w adresach URL klienta. Uruchamiam jeden serwer hostujący 6 oddzielnych witryn, w tym 3, które są z powrotem przez Tomcat, przy użyciu tej metody.

 5
Author: gareth_bowles,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-07 21:48:56

Nadal możesz używać AJP, i powinieneś, ponieważ jest szybszy niż HTTP. Po prostu upewnij się, aby włączyć go w http.conf:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

W takim przypadku Ta konfiguracja działa dla mnie:

<VirtualHost *:80>
  ServerName public.server.name

  ProxyRequests Off
  ProxyPreserveHost On

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

  ProxyPass / ajp://localhost:8080/
# ProxyPassReverse might not be needed,
# it's only for redirecting from inside.
#  ProxyPassReverse / ajp://localhost:8080/
</VirtualHost>
 0
Author: John Mikic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-26 18:27:38