![Apache ProxyPass por nome de host dinâmico](https://rvso.com/image/1525415/Apache%20ProxyPass%20por%20nome%20de%20host%20din%C3%A2mico.png)
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