O Apache ProxyPassReverse remapeia o nome de domínio, mas não a porta

3

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?

    
por Mike Scott 19.01.2012 / 12:08

1 resposta

3

Estou apenas supondo aqui, mas até onde posso dizer, ProxyPreserveHost não é necessário aqui. Tenho serviços de back-end em portas não padrão (> 9000) e está funcionando como esperado apenas com as diretivas ProxyPass e ProxyPassRevere

Você poderia tentar novamente depois de comentar ProxyPreserveHost?

    
por 19.01.2012 / 12:51