Proxy reverso para Discourse

Odeio ter que fazer algo fora do comum aqui. Odeio tanto quanto qualquer outra pessoa, mas é tudo o que sei fazer e como todos os outros aplicativos auto-hospedados que tenho estão rodando.

Tenho meu registro A wildcard apontando para um IP interno em minha rede, que tem as portas 80 e 443 exportadas pelo nginx proxy manager, que tem todos os meus certificados SSL configurados. Tenho quase tudo em minha rede existente configurado usando docker, então o nginx proxy manager é seguro de usar porque ele apenas usa a rede docker para fazer proxy via http.

No caso do discourse, tentei configurar discourse.MYDOMAIN.com para o endereço IP local separado sob um registro A separado e consegui resolver; no entanto, a configuração do nginx proxy manager com lets encrypt funciona e como o discourse a configura não funciona para IPs internos.

Então… eu só quero fazer um reverse proxy. Vou tentar todo tipo de configuração do nginx proxy para fazer isso funcionar. Estou um pouco preocupado com ataques man-in-the-middle, mas gostaria de descobrir por que a configuração do lets encrypt do nginx proxy manager funciona com configuração interna e o discourse não.

Tem que haver um jeito!

(P.S. Eu sei que estou com a cabeça a mil. Por favor, façam perguntas específicas e eu posso dar mais clareza)

1 curtida

Estou olhando a opção de desafio dns-01 mencionada aqui.

Como eu faria isso, se possível, com minha configuração do Discourse?

1 curtida

Existem alguns tópicos sobre a execução do Discourse atrás do nginx proxy manager. Basicamente, você configura o Discourse para não se vincular a nenhuma porta e adiciona os rótulos necessários em uma seção labels: em seu app.yml.

2 curtidas

Se eu seguir o caminho do nginx proxy manager, que é como o tenho configurado agora (em oposição a configurar o lets encrypt na própria VM do Discourse)…

Eu ainda precisaria me vincular à porta 80 na VM do Discourse porque é uma máquina separada no meu caso.

Minha experiência atual é que estou recebendo erros de Conteúdo Misto com minha configuração atual do nginx proxy manager com a configuração SSL lá apontando para o endereço IP da VM do Discourse na porta 80.

Não acho que seja possível se livrar disso, já que as referências http:// no código estão codificadas… ou estou enganado? é isso que o campo de rótulos que você mencionou mudaria?

Vou tentar o template socketd mencionado aqui junto com a configuração para o nginx proxy manager na aba avançada aqui.

Existe uma configuração chamada force_https que você precisa habilitar, seja via ENV ou console Rails.

Além disso, não se esqueça de definir um x-forwarded-proto adequado em seu proxy.

2 curtidas

Tentarei isso se a configuração do soquete Unix não funcionar. Obrigado @Falco e @pfaffman pelo suporte. Voltarei com o que funcionar.

Não consigo configurar o soquete Unix… minha VM do Discourse está em uma máquina separada. Voltando ao plano original. Deixe-me ver se consigo habilitar o force_https com outras postagens no fórum. Para sua informação, este é o passo que não consigo fazer.

Você na verdade precisa do que Falco sugeriu.

2 curtidas

no nginx proxy manager:

proxy_set_header X-Forwarded-Proto $scheme;

isto para habilitar force_https?

2 curtidas

DISCOURSE_FORCE_HTTPS=true eu acredito (env)
ou
DISCOURSE_FORCE_HTTPS: true em app.yml na seção ENV.

Consegui fazer isso na GUI, como mencionei antes.

@Falco, @pfaffman, @Jagster, @merefield… obrigado a todos, configurei com sucesso o proxy reverso e não tenho mais esses erros de Conteúdo Misto.

Assim que fiz o proxy reverso para a porta 80 da VM do discourse e consegui registrar e tudo mais, a questão foi definir force_https usando a GUI e adicionar o sinalizador x-forwarded-proto na aba avançada do nginx proxy manager.

2 curtidas