Estou tentando usar um proxy Apache como um front-end para um serviço em execução em um servidor diferente em minha infraestrutura. Vamos chamá-los de proxy.example.com e service.example.com.
Proxy.example.com está escutando na porta 80, mas service.example.com está escutando na porta 8888. A primeira coisa que service.example.com faz quando você se conecta a ele é enviar um redirecionamento 302 com porta 8888 incluído - e o Apache está remapeando corretamente o nome de domínio, mas não a porta no redirecionamento. O serviço em service.example.com é um produto empacotado de terceiros, então vamos supor que não podemos mudar a maneira como ele funciona de qualquer maneira.
O bit relevante da configuração do Apache tem esta aparência:
ProxyPreserveHost On
ProxyPass / http://service.example.com:8888/
ProxyPassReverse / http://service.example.com:8888/
Aqui estão algumas telnets (levemente anônimas) para a porta 80. Primeiro, vá direto para service.example.com:
$ telnet service.example.com 8888
Trying xxx.xxx.xxx.xxx...
Connected to service.example.com.
Escape character is '^]'.
GET / HTTP/1.0
Host: service.example.com
HTTP/1.0 302 Found
Date: Thu, 19 Jan 2012 10:38:54 GMT
Content-Type: text/html
Location: http://service.example.com:8888/directory/index.html
Connection closed by foreign host.
E indo pelo proxy.example.com:
$ telnet proxy.example.com 80
Trying yyy.yyy.yyy.yyy...
Connected to proxy.example.com.
Escape character is '^]'.
GET / HTTP/1.0
Host: proxy.example.com
HTTP/1.1 302 Found
Date: Thu, 19 Jan 2012 10:41:08 GMT
Location: http://proxy.example.com:8888/directory/index.html
Via: 1.0 service.example.com
Vary: Accept-Encoding
Content-Length: 0
Connection: close
Connection closed by foreign host.
Então, como posso fazer o Apache remapear o número da porta, bem como o nome do domínio no redirecionamento 302?