HTTPS através de Proxy; Discourse ainda tentando obter arquivos usando HTTP

E aí! Acabei de tentar configurar meu fórum Discourse. Ao clicar no link no e-mail, vi um botão, mas não consegui clicar nele. Apareceram vários erros, que parecem ocorrer porque o sistema está tentando carregar arquivos via HTTP. Isso pode ser causado pelo fato de eu não estar usando HTTPS diretamente no Discourse, mas sim através do meu servidor web Apache2 com um ProxyPass. Como posso fazer com que ele solicite os arquivos via HTTPS sem usar o HTTPS do Discourse? (Ou me diga uma maneira de usar meus arquivos .crt e .key que já existem facilmente com o Discourse, de forma que funcione também :wink:)

Você ativou o force HTTPS no Discourse?

Como eu faria isso? (sem usar o LetsEncrypt ou SSL via Discourse)
Bastaria descomentar o templates/web.ssl.template.yml e deixar o templates/web.letsencrypt.ssl.template.yml comentado? (Desculpe perguntar, mas a reconstrução demora tanto que prefiro ter certeza antes).

Basta ir às configurações e marcar a caixa de opção que diz ‘forçar HTTPS’.

Apenas para esclarecer, tenha 100% de certeza de que seu proxy reverso consegue lidar com SSL para o Discourse antes de ativar essa configuração.

:warning: O Discourse não funciona bem com o Apache2… Se possível, migre para o Nginx.

Espera, que Configurações? Onde diabos eu encontraria uma caixa de seleção?

community.example.net/admin é o caminho onde você encontrará o painel de administração do Discourse.

Mas para isso, preciso de uma conta no meu fórum primeiro, o que não consigo criar sem resolver o problema do HTTPS.

Você pode ativar o SSL forçado via console:

./launcher enter app
rails c
SiteSetting.force_https = true
exit
exit

Preciso reconstruir ou fazer algo mais depois disso?
Edição: Já reconstruí. Ainda recebo o mesmo erro de que alguns arquivos ainda estão sendo carregados via HTTP.

O force_https foi removido da interface de administração, pois causava mais confusão do que qualquer outra coisa.

Como o Discourse agora instala o HTTPS por padrão, apenas casos como este exigem que ele seja habilitado manualmente.

Não foi ativado por padrão para mim. Estava tendo problemas ao usar o script de instalação, então editei o app.yml. É esse o motivo?

Você está fazendo HTTP atrás do proxy desabilitando o template para HTTPS?

Os dois modelos HTTPS foram desabilitados por padrão para mim.
O Discourse está rodando nas duas portas padrão no Servidor 2.
Estou usando um ProxyPass em um VHost do apache2 (rodando no Servidor 1) onde o SSL está configurado.
Acabei de perceber que posso simplesmente habilitar o HTTPS pelo Discourse e, como ele está rodando nas portas padrão, posso apenas apontar community.website.tld para o IP do Servidor 2.
Como devo proceder para habilitar o SSL? Descomentar os dois modelos e depois inserir o e-mail do LetsEncrypt? Além disso, como crio uma conta no LetsEncrypt? Não consigo encontrar nenhum botão “Registrar” no site deles.

Basicamente isso: ative o modelo para HTTPS e Let’s Encrypt, certifique-se de que a porta 443 está exposta e especifique um e-mail antes de reconstruir.

Existem muito poucas boas razões para colocar o Discourse atrás de um proxy. Se ele tiver um servidor dedicado e um FQDN, será muito mais fácil gerenciá-lo com o método acima.

Mas qual e-mail devo especificar lá? Diz que é para uma conta do Let’s Encrypt, então preciso criar uma? Onde?

Apenas um e-mail para receber notificações. Você não precisa registrá-lo previamente.

Acabei de ativar o SSL e tudo mais, mas agora recebo um erro 502 do Cloudflare.

Certifique-se de que o proxy está configurando corretamente o cabeçalho X-Forwarded-Proto para https, o que deve corrigir a detecção de HTTPS.

Desative o Cloudflare por enquanto. A menos que você seja frequentemente atacado, ele causa mais prejuízos do que benefícios.

Se a nuvem laranja estiver ativada, o Discourse não conseguirá obter o certificado do Let’s Encrypt.

Fiz isso. O HTTPS está funcionando agora, tudo está sendo carregado via HTTPS, MAS:
Ainda não consigo clicar no botão na Página de Verificação da Conta.


Há um erro e alguns avisos no Console também: