NginX reescreve e caminhos de recursos absolutos

2

No meu domínio, eu tenho um subdomínio para aplicativos Meteor, digamos

http://meteor.example.com/

Abaixo disso, gostaria de colocar aplicativos individuais, com um URI para cada um. Digamos que o aplicativo de meteoro Chat tenha este URL:

http://meteor.example.com/chat/

Esta é minha configuração:

location ~ /chat/(.*) {
        proxy_pass http://127.0.0.1:4000/$1;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_set_header X-Forwarded-For $remote_addr;

        if ($uri != /snake_meteor/) {
                expires 30d;
        }
}

Eu segui este guia para configurá-lo.

Agora, isso funciona parcialmente. Ele passa a solicitação para o aplicativo e retorna o HTML correto para a página, mas os problemas iniciam. O HTML retornado faz referência a arquivos de recursos, como JS, CSS e imagens. As referências no HTML estão infelizmente no formulário

<script src="/somescript.js"></script>

por isso solicita

http://meteor.example.com/somescript.js

Caminhos absolutos ...

Para alterá-los no aplicativo não é realmente uma opção. Também não é uma opção para colocar os recursos na raiz do domínio.

Existe algo que eu possa fazer na configuração do NginX para que isso funcione? Ou eu fiz isso de outra maneira, como outro nível de subdomínios?


Editar: Um amigo meu sugeriu verificar o cabeçalho do referenciador. Isso funciona parcialmente. Alguns dos arquivos são buscados, mas o estabelecimento de um websocket e algumas outras coisas falham.

Minha configuração adicionada para isso é

location / {
        if ($http_referer ~ /chat/) {
                rewrite ^(.*) /chat/$1 permanent;
        }
}

Esta é uma maneira aceitável de fazer isso? Tenho certeza de que essa parte da configuração pode ser reescrita para levar em consideração outros aplicativos de meteoro no mesmo domínio, mas não sou especialista em configuração do NginX. Um pouco de ajuda, por favor?

    
por Suppen 16.02.2015 / 08:27

1 resposta

2

Infelizmente, a única solução razoável é corrigir o aplicativo para que ele gere URLs corretos. Todas as outras soluções causarão problemas sutis.

    
por 16.02.2015 / 10:35