Redirecionamento errado no ProxyPass de http para https

1

Este é o cenário:

Eu tenho um servidor Linux acessível apenas por um URL (porque o servidor é uma máquina virtual em uma VPN):

url: link

Eu tenho vários aplicativos da Web acessíveis desta maneira:

foo.bar.com/java_app = > aplicativo java wep instalado em um tomcat

foo.bar.com/webpage = > página da web instalada no servidor apache

  • O servidor Linux tem um servidor apache2 que me permite usar vários arquivos de configuração para criar hosts virtuais para fazer o problema anterior:

Nota: myhost = > localhost

ProxyPreserverHost On

<VirtualHost *:80>
   ServerName foo.bar.com
   DocumentRoot /var/www/webpage
   JkMountCopy On
   SSLProxyEngine On

   ProxyPass /java_app http://myhost:8080/java_app
   ProxyPassReseverse /java_app http://myhost:8080/java_app

   #This uses the DocumentRoot
   ProxyPass /webpage http://myhost:80/
   ProxyPassReseverse /webpage http://myhost:80/

</VirtualHost>

O problema é que eu tenho outro software em node.js acessível internamente através deste url:

   https://myhost:8061. (a webpage too).

A solução poderia estar adicionando essas linhas:

   ProxyPass /ssl_app https://myhost:8061/
   ProxyPassReseverse /ssl_app https://myhost:8061/

Mas isso falha. O problema é que os arquivos (fontes) da página da Web (js, css, outros arquivos) não são carregados corretamente, de acordo com o aplicativo da Web também. (Firefox)

Por exemplo, dentro do "foo.bar.com/ssl_app" eu posso ver as urls das fontes e elas devem ser assim:

foo.bar.com/ssl_app/js/one.js foo.bar.com/ssl_app/js/two.js foo.bar.com/ssl_app/css/css.js

No entanto, eu obtenho assim:

foo.bar.com/js/one.js foo.bar.com/js/two.js foo.bar.com/css/css.js

(redirecionamento de foo.bar.com/ssl_app = > foo.bar.com /)

Obviamente, o aplicativo da web não funciona.

Assim, se eu colocar foo.bar.com/css/css.js diretamente, o arquivo será mostrado corretamente.

detalhes do log:

*** File does not exist: /var/www/webpage/lib, refere http://foo.bar.com/ssl_app 

Eu acho que isso é para DocumentRoot (/ var / www / webpage /), mas como posso criar um novo VirtualHost com o mesmo ServerName?

Qualquer um poderia me dizer o que eu posso procurar na configuração do apache?

Obrigado.

    
por dlopezgonzalez 14.05.2013 / 18:22

3 respostas

2

Você parece pensar que o ProxyPassReverse também modifica URLs no conteúdo entregue pelo back-end. Isso não está correto. ProxyPassReverse só será usado quando seu servidor backend (seu "ssl_app") enviar um redirecionamento. O conteúdo em si não é tocado.

Você tem várias opções:

  • Modifique seu "ssl_app" para usar o URL base correto para seus recursos. Esta é a melhor solução.
  • Use mod_proxy_html para modificar o html exibido pelo back-end antes de encaminhá-lo ao cliente.
por 15.05.2013 / 06:42
0

Você pode precisar ativar

SSLProxyEngine On

Para proxy do SSL por meio da solicitação HTTP.

Veja: Apache ProxyPass com SSL

    
por 14.05.2013 / 19:05
0

O problema é que meu "ssl_app" é um aplicativo da web que usa websockets. O Apache não oferece suporte a soquetes da Web, portanto, preciso pesquisar uma maneira de "redirecionar" um aplicativo com WebSockets (com link ) ou altere o servidor http com Nginx (o Nginx é compatível com WebSockets).

    
por 16.05.2013 / 15:15