Avatares, logotipos de site e erros de certificado

O que diz o log/production.log (no Docker em execução) quando você tenta fazer login com falha (portanto, com force_https=true)?

@RGJ – Adorei sua solução! Devo usar force-https com a última sugestão? RE proxy_pass https.
EDIT: Recebo um erro 502 se apenas usar proxy_pass https://192.168.86.108.
EDIT2: Desabilitei a porta 80 no Discourse via app.yml e ainda assim não funcionou. Acabei de reler sua postagem: o container do Discourse possui sua própria instância do Nginx? Então, na prática, estou passando um proxy para outro proxy? Desculpe, estou realmente confuso neste momento.

@itsbhanusharma eu devo comentar 80:80 #http e seguir o conselho de @RGJ de usar proxy_pass https?

Por que você não está seguindo o processo suportado para multisite aqui? Você está essencialmente reinventando uma roda muito frágil.

Foram fornecidos tantos links agora, @Stephen, que estou sem saber como entender tudo. Eu achava que estava seguindo os processos suportados. Os comentários acima não são suportados? :pensive:

Sim, porque você não estava usando force_https, daí a tag unsupported-install acima. Se você se desviar de uma trajetória suportável, não receberá muita assistência.

Comece aqui:

Há um guia separado para lidar com encapsulamento SSL em multisite.

Então, o container padrão executa apenas http? Como o que estou tentando fazer é multi-site? Não estou tentando hospedar múltiplos domínios; tenho um único domínio. Poderia, por favor, esclarecer como isso resolve meu problema?

O que você quis dizer com:

Configurei servidores Discourse em cerca de 5 instâncias e todas parecem apresentar comportamento estranho; não tenho certeza se é realmente um bug ou se alguém mais teve a mesma experiência.

Infraestruturas independentes, de forma alguma conectadas entre si.
Mas todas com configurações muito semelhantes, conforme descrito acima.

Então, por que o nginx está fazendo proxy do host de qualquer forma? O que mais está acontecendo nas máquinas?

Temos várias VMs que não são expostas externamente; o tráfego é roteado através do proxy (que está exposto externamente) até a VM do Discourse internamente. Situação semelhante em cada uma das instalações separadas. Isso esclarece?

Não exatamente, mas de uma forma ou de outra, essa é uma dor técnica com a qual você vai ter que conviver. É impossível comentar se há uma abordagem melhor quando o caso de uso e a topologia são tão ambíguos.

Acredito que a combinação correta de soluções foi a seguinte:

Conforme mencionado por @itsbhanusharma:
EDITAR /var/discourse/containers/app.yml e alterar as portas para algumas personalizadas. Eu usei:

- "8080:80" #http
- "4343:443" #https

Executei ./launcher rebuild app

Em seguida, modifiquei nosso proxy externamente acessível para encaminhar solicitações nas portas 80/443 para http://ip_interno:8080

Após executar sudo nginx -t e sudo systemctl restart nginx, fiz login no servidor https://discourse.mobiusnode.io (que ainda apresentava os problemas mencionados acima) e ativei force_https, momento em que parece que tudo está funcionando corretamente.

Agora vou reproduzir isso nos demais servidores/infraestruturas.

Em anexo está uma janela anônima de login no site com a chave SSL ativa, imagens aparecendo, etc.

Apenas para esclarecer, isso não é o que eu sugeri.

Eu apenas pedi que você expusesse a porta 80 em um IP local e terminasse o SSL no seu proxy reverso.

Então, não usar SSL no meu proxy externo, mas sim encaminhar solicitações http simples para o servidor Discourse e permitir que o force_https trate essas solicitações? Como o certificado é então transmitido? Através da primeira instância do Nginx? É aqui que as coisas quebram para mim.

Bem, desde que funcione e você possa reconstruir/atualizar sem problemas. Parece que você já está fazendo o que @itsbhanusharma sugeriu em sua postagem mais recente.

Se você estiver compartilhando um único IP com múltiplas conexões SSL, precisará de um certificado SAN na frente do seu proxy. Se a rede for segura, tudo o que estiver atrás dela pode ficar sem criptografia.

O Discourse exige o force_https se o usuário se conectar via SSL, e você precisa garantir que o cabeçalho mencionado acima seja preservado e encaminhado.

Não, existe algo chamado SNI.

Estou bem ciente disso, mas como todos os certificados vêm do Let’s Encrypt, qual seria o valor em solicitar certificados separados? O LE suporta SAN, então por que não usá-lo?