Proxy inverso para 3 sites todos no contexto raiz

2

Estamos lutando com o problema a seguir e tentando entender qual é a melhor maneira de lidar com isso. O objetivo geral é tal:

--> example.com/app1         -->  app1.com/
--> example.com/app1/images  -->  app1.com/images

--> example.com/app2         -->  app2.com/
--> example.com/app2/images  -->  app2.com/images

--> example.com/app3         -->  app3.com/
--> example.com/app3/images  -->  app3.com/images

Nós consideramos as soluções a seguir, algumas delas funcionam e outras não. Estamos tentando descobrir qual é a melhor maneira de fazer isso porque não somos especialistas. A ferramenta que temos usado até agora é o Nginx para fazer o proxy reverso, mas a ferramenta não importa, estamos abertos a qualquer coisa.

Solução 1

O Nginx reescreve o texto do corpo para adicionar "app1" às solicitações do app1, etc. Como no exemplo acima, há uma solicitação para o app1 e um index.html volta. Esse index.html, por sua vez, tem alguma tag que parece com <img src="images/hello.png" /> file. Isso obviamente não funcionará, então nós reescrevemos o corpo (ou seja, o index.html) para dizer <img src="app1/images/hello.png" /> .

Problema com a Solução 1

Temos que ser muito bons sobre como criamos as regras de reescrita do corpo, caso contrário poderíamos reescrever algo que não pretendíamos e depois quebrar algum JS ou HTML. Esta solução também não funciona para alguns dos códigos JS (estamos usando o Angular), que não implicitamente escreve a localização das views e é, em vez disso, montado pelo próprio framework.

Solução 2

Mova todos os aplicativos da raiz para sua própria pasta. Isso significa que qualquer solicitação img ou outra será atualizada para <img src="app1/images/hello.png" /> .

Problema com a solução 2

Precisamos alterar todos os três sites existentes para solicitar recursos de suas respectivas novas raízes.

Qualquer ajuda seria muito apreciada, obrigado antecipadamente.

    
por Arthur Maltson 13.02.2014 / 17:33

2 respostas

2

O ideal é que você possa reimplantar seus aplicativos de forma que cada aplicativo seja instalado em http://app<n>.com/app<n> em vez da raiz do documento.

Se não, talvez você possa tornar os links relativos, em vez de vincular a /images/logo.png link a ../images/logo.png ou images/logo.png ou ../../images/logo.png dependendo da página veiculada, que será traduzida corretamente em uma situação de Proxy reverso .

Obviamente, o uso de subdomínios para cada aplicativo funcionará bem, invertendo tudo em app<n>.example.com/ para seu app<n>.com/

Normalmente, um proxy reverso não reescreverá o conteúdo do corpo de resposta que recebe do servidor para o qual a solicitação foi encaminhada, mas o apache permitirá que você faça isso:

<Location /app1/>
   ProxyPass http://app1.com/
   ProxyPassReverse http://app1.com/ 
   # rewrite the reponse body  
   AddOutputFilterByType SUBSTITUTE text/html
   Substitute "s|/images/|/app1/images/|i" 
</Location>
    
por 13.02.2014 / 18:23
0

Você pode usar o nginx como um proxy reverso para o domínio example.com.

Assim, no arquivo conf do site nginx, por exemplo.com, você pode definir uma frase de reescrita para realizar o que está procurando.

Você pode ler este guia: link & link

Espero que isso funcione para você.

:)

    
por 13.02.2014 / 17:42