Estou tentando construir um proxy reverso do Apache para tornar um conjunto de servidores acessível por meio de um único ponto de acesso. Todos os servidores oferecem uma interface de administração web na porta 3000, e pretendo apresentar todos eles como diretórios no proxy reverso. As interfaces contêm links locais que devem ser reescritos para ir para o subdiretório correto do servidor no proxy.
Eu posso alcançar o comportamento necessário com trechos de configuração como este para cada servidor individualmente:
<Location /testadmin-warsaw/>
ProxyPass http://warsaw.example.com:3000/
ProxyPassReverse /
ProxyHTMLEnable On
ProxyHTMLURLMap / /testadmin-warsaw/ L
RequestHeader unset Accept-Encoding
</Location>
Como isso se torna bastante tedioso e propenso a erros à medida que os servidores vêm e vão, estou buscando uma configuração dinâmica. De acordo com a documentação do Apache, o seguinte deve funcionar:
<LocationMatch "^/testadmin-(?<OFFICENAME>\w+)/(.*)$">
ProxyPassMatch http://$1.example.com:3000/$2
ProxyPassReverse /
ProxyHTMLEnable On
ProxyHTMLInterp On
ProxyHTMLURLMap / /testadmin-${env:MATCH_OFFICENAME|unknown}/ VL
RequestHeader unset Accept-Encoding
</LocationMatch>
<LocationMatch>
definiria a variável de ambiente MATCH_OFFICENAME
para a parte do nome do escritório do diretório e ProxyHTMLURLMap
inseriria esse nome no local apropriado nos links reescritos.
Mas quando eu testo essa configuração, um link originalmente apontando /other/page.html
é reescrito em /testadmin-unknown/other/page.html
vez de /testadmin-warsaw/other/page.html
como pretendido. Em outras palavras, ProxyHTMLURLMap
age como se a variável de ambiente MATCH_OFFICENAME
não estivesse definida.
Se eu omitir a env:
parte e colocar apenas /testadmin-${MATCH_OFFICENAME}/
como o padrão, o Apache registra um aviso: "AH00111: A variável de configuração ${MATCH_OFFICENAME} não está definida".
Onde está meu erro?
A sintaxe sem
env:
está correta. AAH00111
mensagem de aviso que produz é espúria, conforme Apache Bug #58467 .A configuração:
funciona como pretendido, exceto pelo aviso espúrio em cada inicialização.