múltiplo proxy reverso baseado em URL

1

Depois de algum tempo pesquisando na Internet, ainda estou lutando para configurar meu host virtual Apache Proxy.

Minha configuração é bem simples:

  • o servidor hospeda vários aplicativos expressos pelo NodeJS
    • uma API REST feita à mão (ouvindo na porta 8080)
    • um adminMongo (escutando na porta 8081)
  • O Apache escuta na porta 80 e está acessível em 10.8.0.1

Aqui está o arquivo de configuração do Apache que está perto de funcionar:

<VirtualHost *:80>
    <Location /custom>
        RewriteEngine on
        RewriteRule ^/custom/(.*) /$1
        ProxyPass http://localhost:8080/
        ProxyPassReverse http://localhost:8080/
    </Location>

    <Location /mongo>
        RewriteEngine on
        RewriteRule ^/mongo/(.*) /$1
        ProxyPass http://localhost:8081/
        ProxyPassReverse http://localhost:8081/
    </Location>
</Virtualhost>

Este Vhost foi inspirado por este post: Apache: proxy baseado em sufixos de URL .

O principal problema é que quando tento GET http://10.8.0.01/mongo/ , sou redirecionado para http://10.8.0.1/app/login/ (o express-app está fazendo isso), o que me dá um erro 404, pois meu Apache não tem nada para ser exibido em / .

Como posso combinar todo o URL que começa com /mongo/ para que meu aplicativo atenda em http://127.0.0.1:8081/ ?

Qualquer sugestão apreciada.

    
por gotgot1995 06.06.2018 / 14:16

1 resposta

0

The main problem is that when I try to GET http://10.8.0.01/mongo/ I'm redirected to http://10.8.0.1/app/login/ (the express-app is doing this) which gives me a 404 error since my Apache has nothing to serve at /.

Isso é esperado por causa de como você o configurou. Isso é mencionado na postagem que você mencionou:

But there's a problem: links in the HTML coming back from Tomcat will have a URL base of /, not /dev etc. To add the prefix back into the HTML, you'll have to use mod_proxy_html or an equivalent to parse the HTML, modify it, and put it back together. That can work, but there's a performance cost; ill-formed HTML can get mangled; you'll have to rewrite URLs in CSS and Javascript too; and the Javascript may be impossible to get right.

Portanto, quando você faz uma solicitação ao / mongo, ele está sendo enviado para o aplicativo como / , o que significa que todos os retornos estão retornando como / , portanto, o redirecionamento começará com / em vez de /mongo/...

Conforme indicado na postagem vinculada, verifique os documentos ou use subdomínios.

Dependendo do seu caso de uso real, você pode usar o seguinte:

<LocationMatch ^/custom>
  ProxyPass http://localhost:8080/
  ProxyPassReverse http://localhost:8080/
</LocationMatch>

<LocationMatch ^/mongo>
  ProxyPass http://localhost:8081/
  ProxyPassReverse http://localhost:8081/
</LocationMatch>
    
por 06.06.2018 / 16:25