Apache ProxyPass por nome de host dinâmico

Apache ProxyPass por nome de host dinâmico

Estou tentando configurar o Apache para fazer proxy para um servidor interno baseado em nomes de host dinâmicos e usando outras portas. Parece ser um pouco complicado para mim. Isto é o que eu tenho:

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

Mas isto (obviamente) não é dinâmico. Tenho trabalhado em regras de reescrita, etc., mas não consegui fazer funcionar. O que eu realmente preciso é algo como:

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

desde já, obrigado

Responder1

Você pode usar RewriteRule para fazer proxy de uma solicitação. Odocumentação do apache para usar mod_rewrite como proxymostra o seguinte:

Descrição:

mod_rewrite fornece o sinalizador [P], que permite que URLs sejam passados, via mod_proxy, para outro servidor. Dois exemplos são dados aqui. Em um exemplo, uma URL é passada diretamente para outro servidor e servida como se fosse uma URL local. No outro exemplo, fazemos proxy do conteúdo ausente para um servidor back-end.

Solução:

Para simplesmente mapear uma URL para outro servidor, usamos o sinalizador [P], como segue:

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

No segundo exemplo, procuramos a solicitação somente se não conseguirmos encontrar o recurso localmente. Isso pode ser muito útil quando você está migrando de um servidor para outro e não tem certeza se todo o conteúdo já foi migrado.

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

O segundo exemplo, reescrever condicionalmente URLs com o sinalizador [P] para fazer proxy da solicitação parece ser o que você precisa.

Responder2

Minha "solução" anterior ainda não estava funcionando corretamente, então a excluí para evitar confusão. Parece não ser possível do jeito que eu quero, mas uma pequena solução alternativa usando um subdomínio em vez de um subdiretório ainda o torna incrível.

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

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

informação relacionada