Regras de proxy reverso do Apache para criar cabeçalhos HTTP a partir de informações de URI?

1

Estou testando um aplicativo da Web hospedado em produção por trás do SiteMinder , que autentica o usuário e adiciona um cabeçalho HTTP a cada solicitação que identifica esse usuário.

O aplicativo não funciona se o cabeçalho não estiver presente e eu estou tentando testá-lo usando Watir e Webdriver . Essa combinação gera um navegador real (por exemplo, Firefox) localmente, por isso não consigo inserir cabeçalhos HTTP facilmente por meio do WebDriver. Nosso ambiente de teste local não tem o SiteMinder, então eu preciso de uma maneira de inserir os cabeçalhos.

Eu configurei o Apache 2 como um proxy reverso e quero traduzir uma solicitação como:

GET /[email protected]/application/index.html

para:

GET /application/index.html
SM_USER: [email protected]

Nossos servidores são todos do Solaris 10 e atualmente eu estou usando o Apache / 2.0.63 como instalado com o sistema operacional (não o estamos usando para mais nada).

O mais próximo que tenho é usar SetEnvIf e mod_rewrite :

SetEnvIf Request_URI "SM_USER=([^/]+)" HTTP_SM_USER=$1
RewriteEngine on
RewriteRule ^/.+(/application/.+)$ http://apphost:9090$1 [P]

Mas o cabeçalho não está sendo definido. Parece que o valor de Request_URI está sendo reescrito antes que a diretiva SetEnvIf esteja sendo executada, portanto SM_USER não está mais no URI.

Se estou certo sobre isso, é possível alterar a ordem de execução, então SetEnvIf obtém o URI original? Ou preciso de uma abordagem diferente?

    
por pharsicle 12.11.2013 / 23:08

1 resposta

1

Meu colega apresentou uma solução. Eu cometi o erro de assumir que usar SetEnvIf por si só era suficiente. Isso agora está funcionando para nós:

RewriteEngine on
# Anything ending with /application/.+ goes to http://apphost:9090
RewriteRule ^/.+(/application/.+)$ http://apphost:9090$1 [P]
# Match SM_USER= in the URI and set an env var with its value.
SetEnvIf Request_URI "SM_USER=([^/]+)" SM_USER=$1
# If the env var is set, put the value into a request header.
RequestHeader set SM_USER "%{SM_USER}e" env=SM_USER

Esta URI é intermediada por proxy para http://apphost:9090/application/index.html com o cabeçalho HTTP SM_USER definido como [email protected] :

/[email protected]/application/index.html
    
por 13.11.2013 / 22:34