Apache ProxyPass por nombre de host dinámico

Apache ProxyPass por nombre de host dinámico

Estoy intentando configurar Apache para que actúe como proxy de un servidor interno basado en nombres de host dinámicos y usando otros puertos. Me parece un poco complicado. Esto es lo que tengo:

<Location /awesomewebapp>
ProxyPass http://[internalservername]:8080/awesomewebapp
ProxyPassReverse http://[internalservername]:8080/awesomewebapp
</Location>

Pero esto (obviamente) no es dinámico. He estado trabajando en reglas de reescritura, etc., pero no logré que funcionara. Lo que realmente necesito es algo como:

^/[internalservername]/awesomewebapp
      proxy internally to
http://[internalservername]:8080/awesomewebapp

gracias de antemano

Respuesta1

Puede utilizar RewriteRule para representar una solicitud. Eldocumentación de Apache para usar mod_rewrite como proxymuestra lo siguiente:

Descripción:

mod_rewrite proporciona el indicador [P], que permite pasar las URL, a través de mod_proxy, a otro servidor. Aquí se dan dos ejemplos. En un ejemplo, una URL se pasa directamente a otro servidor y se sirve como si fuera una URL local. En el otro ejemplo, transferimos el contenido faltante a un servidor back-end.

Solución:

Para simplemente asignar una URL a otro servidor, usamos el indicador [P], de la siguiente manera:

RewriteEngine en RewriteBase "/products/" RewriteRule "^widget/(.*)$" "http://product.example.com/widget/$1" [P] ProxyPassReverse "/productos/widget/" "http://product.example.com/widget/"

En el segundo ejemplo, representamos la solicitud solo si no podemos encontrar el recurso localmente. Esto puede resultar muy útil cuando está migrando de un servidor a otro y no está seguro de si ya se ha migrado todo el contenido.

RewriteCond "%{REQUEST_FILENAME}" !-f RewriteCond "%{REQUEST_FILENAME}" !-d RewriteRule "^/(.*)" "http://antiguo.ejemplo.com/$1" [P] ProxyPassReverse "/" "http://antiguo.ejemplo.com/"

El segundo ejemplo, reescribir URL condicionalmente con el indicador [P] para representar la solicitud parece ser lo que necesita.

Respuesta2

Mi "solución" anterior todavía no funcionaba correctamente, así que la eliminé para evitar confusiones. Parece que no es posible de la manera que quiero, pero una pequeña solución usando un subdominio en lugar de un subdirectorio aún lo hace genial.

RewriteCond %{HTTP_HOST} ([^.]+)
RewriteRule ^/(.*) http://%1:8080/$1 [P]

Fuente:http://www.vanbommelonline.nl/2011/10/using-apache-for-dynamic-reverse-proxy.html

información relacionada