nginx vários sites, redirecionando por URL

2

Digamos que eu tenha vários sites de interface do usuário da web usados para monitorar serviços de back-end.

Gostaria de torná-los acessíveis a partir da Web (protegidos pelo Auth), mas idealmente agrupados em um subdomínio e acessíveis por meio de vários URLs, como:

https://monitor.mydomain.com/my-service-monitor/

Usando o nginx, se eu usar uma regra de regravação como

server {
    listen 443 ssl;
    server_name monitor.mydomain.com;
    # auth stuff here...

    location /my-service-monitor/ {
        rewrite                     ^/my-service-monitor(/.*)$ $1 break;
        proxy_pass                  http://my-service-monitor;
    }
} 

o que acontece é que o redirecionamento funciona, mas como todo o conteúdo estático se refere ao URL raiz, ele não é exibido como esperado (porque o site de back-end está exibindo HTML com a raiz / URL, não o URL relativo monitor.mydomain.com/my-service-monitor /...

Como posso corrigir esse problema ou há uma solução mais fácil para isso? (Eu poderia usar vários subdomínios, mas isso é muito fora da exposição IMO)

Eu estava pensando em redirecionar (com um retorno 301 ...) para a URL raiz do subdomínio, mas em uma porta diferente e, em seguida, adicionar um bloco de servidor escutando naquele proxy de porta para o servidor, mas sinto que é isso vai ser problema com auth.

Qualquer ideia seria apreciada.

    
por MrE 02.09.2015 / 21:47

2 respostas

0

Acabei de atribuir a cada site uma porta diferente, no mesmo subdomínio

o problema é que o bloco do servidor deve incluir a porta no server_name. No começo eu só tinha a lista de valores de escuta a porta, mas não iria funcionar com vários sites no mesmo server_name, então é necessário

server {
    listen       8000 ssl;
    server_name  sub-domain.domain.com:8000;
    #auth stuff
    location / {
        proxy_pass                  http://my-service-monitor1;
    }
}

server {
    listen       8001 ssl;
    server_name  sub-domain.domain.com:8001;
    #auth stuff
    location / {
        proxy_pass                  http://my-service-monitor2;
    }
}
    
por 03.09.2015 / 21:02
1

Você precisa ensinar seu aplicativo de back-end a gerar URLs corretos para a página. Existem pessoas que estão, aparentemente, escrevendo código lua personalizado para modificar o HTML retornado de dentro do nginx, mas honestamente eu recomendaria evitar isso porque é insano.

    
por 03.09.2015 / 03:43

Tags