mod_proxy_ajp keepalive httpd example conf apache tomcat mod-proxy ajp

keepalive - Apache+Tomcat: utilizando mod_proxy en lugar de AJP



apache reverse proxy example (3)

Aún puede usar AJP, y debe hacerlo ya que es más rápido que HTTP. Solo asegúrate de habilitarlo en http.conf:

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

En ese caso, esta configuración funciona para mí:

<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>

¿Hay alguna manera de conectar Apache a Tomcat usando un proxy HTTP de modo que Tomcat obtenga el nombre de host entrante correcto en lugar de localhost? Estoy usando esta directiva en apache:

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

Pero viene a través de localhost, que es inútil cuando tenemos un montón de sitios en el mismo servidor. Podría configurar el host manualmente en la configuración del servidor:

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

Pero eso nuevamente no sirve a más de un sitio. Y no me gusta la idea de usar un puerto interno diferente para cada sitio, eso suena realmente feo.

¿No hay forma de transferir el puerto cuando lo proxy?

(Si preguntas por qué no uso AJP, la respuesta es este error . Estoy intentando todo lo que puedo antes de renunciar completamente a Tomcat y Apache )


Creo que su mejor apuesta si quiere tener varios sitios en el mismo servidor es usar hosts virtuales en su configuración de Apache. Aquí hay un ejemplo:

<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>

Siempre que tenga server.domain.com registrado en su DNS externo, el nombre del host entrante se mostrará en las URL de los clientes. Estoy ejecutando un servidor único que hospeda 6 sitios separados, incluidos 3 que están de regreso por Tomcat, usando este método.


La configuración que está buscando es:

<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>

Tenga en cuenta que estamos utilizando localhost como destino proxy. Podemos hacer esto ya que habilitamos ProxyPreserveHost . La documentación dice que

Es principalmente útil en configuraciones especiales como el servidor virtual basado en nombre masivo con proxy, donde el servidor de back-end necesita evaluar el encabezado original del Host.

que suena exactamente como lo que estás haciendo.