O Apache pode reescrever o cabeçalho do host de um pedido com base no URL?

2

O Apache é um proxy reverso do meu aplicativo. Um cliente solicita http://cdn.example.com/foo/images/logo.png :

GET /foo/images/logo.png HTTP/1.1
Host: cdn.example.com

Eu quero que o Apache modifique a solicitação para que o aplicativo no outro lado do proxy reverso a receba no formato http://foo.example.com/images/logo.png :

GET /images/logo.png HTTP/1.1
Host: foo.example.com

Reescrever o URL é fácil, mas não encontrei uma maneira de modificar o cabeçalho do host com um valor extraído do URL. Isso é possível?

    
por sh-beta 01.12.2011 / 22:20

2 respostas

5

Sim, você pode alterar os cabeçalhos com base em URIs. É feio, porém - essa é a única maneira que conheço de fazer:

  1. Use SetEnvIF para definir uma variável de ambiente se o URI corresponde ao que você deseja reescrever.

  2. Use a diretiva mod_headers ' RequestHeader para redefinir o cabeçalho da solicitação apropriado ( Host: ) se essa variável de ambiente estiver definida.

por 01.12.2011 / 22:49
3

Usando o SetEnvIf e o Header mencionados acima, aqui está o que eu fiz para reescrever o cabeçalho "Accept-Encoding" para reduzir as cópias de cache criadas pelo mod_cache, testadas em funcionamento.

# rewrite variation of the Accept-Encoding header to the same one
# to reduce the caching copies
UnsetEnv compression_ok
SetEnvIfNoCase Accept-Encoding ".*gzip.*deflate.*" compression_ok=1
RequestHeader set Accept-Encoding "gzip,deflate" env=compression_ok

O que isso faz: Navegador diferente define o Accept-Encoding ligeiramente diferente, como "gzip, deflate" vs "gzip, deflate" (com espaço extra), e isso faz com que o mod_cache crie cópias diferentes do conteúdo. Ao reescrevê-lo para o mesmo valor, o mod_cache gera apenas uma cópia. (nota: meu servidor só se preocupa com "gzip, deflate", o seu pode ser diferente).

    
por 20.01.2016 / 00:49