Encaminhamento para contêiner Discourse com nginx proxy_pass e links do Discourse para o servidor host

Olá, equipe Discourse,

Estou executando um servidor nginx na minha máquina host e um container Discourse bastante padrão no Docker. Basicamente, tenho um pequeno número de pastas específicas (HTTP) servidas pelo nginx do host, e tudo o mais é encaminhado para o container Discourse via proxy_pass.

Pelo que entendi do problema, basta saber que meu arquivo de configuração do nginx do host define um local /xyz, que é tratado pelo nginx do host, e depois um local / é definido para ser proxy_pass’ado para o container Discourse.

Para o meu caso de uso, preciso postar links como publicações no Discourse apontando para my.domaiin.com/xyz/some.html, ou seja, links dentro do Discourse apontam para páginas servidas pelo nginx do host.

Isso funcionou até a última atualização do Discourse. Agora, ao clicar nos links, acabo na página “não foi possível encontrar…” do Discourse. Em contraste, copiar os destinos dos links e abri-los em uma nova aba funciona conforme o esperado.

Tenho bastante conhecimento sobre protocolos de baixo nível, mas quanto mais alto subo na pilha de protocolos, menos sei :wink:
Minha hipótese atual é que o nginx do Discourse mantém a conexão aberta (keepalive?), então o nginx do host perde a oportunidade de analisar o novo caminho da solicitação para selecionar o servidor correto. As solicitações da conexão são passadas para o container conforme estão, mantidas ativas. Então, a solicitação para o caminho /xyz é respondida pelo Discourse, que não conhece essa pasta.

Como devo abordar esse problema? Se não houver uma solução simples, já ajudaria obter algumas orientações; até mesmo uma boa descrição em relação a um conhecimento decente de protocolo HTTP pode ajudar.

Obrigado!

Nota adicional: Se isso for realmente um problema de keep-alive, estou totalmente à vontade para desativá-lo e aceitar uma sobrecarga de custo. Esta instalação não tem como objetivo atender a um grande número de usuários.

Pensando bem, provavelmente preciso fazer com que o nginx do host também escute um pipe nomeado, exponha esse pipe dentro do container do Discourse e adicione minha pasta personalizada /xyz à configuração do nginx do Discourse, para fazer um proxy_pass de volta através do pipe recém-criado. (Depois de resolver os detalhes, por exemplo, o nginx do host precisa iniciar primeiro, caso contrário o docker-compose não exibirá corretamente o pipe nomeado)

Ainda assim, qualquer ajuda é bem-vinda :wink:

Isso ocorre porque o roteador do Ember.JS conhece a lista completa de caminhos suportados pela aplicação Discourse, e a página 404 é renderizada no lado do cliente, pois ele sabe que o servidor não possui conteúdo nesse local.

Coloque seus arquivos em outro subdomínio.