Olá a todos. Recentemente, configurei minha instalação do Discourse usando o AWS CloudFront (CF) para aceleração total do site - e offloading de SSL usando certificados AWS no CF. Observe que esta instalação se desvia do guia oficial em relação à configuração de CDN e SSL - portanto, isso pode ser controverso e levar a problemas futuros de suporte. Então, esteja avisado… há dragões aqui. Estou compartilhando a configuração que funcionou para mim aqui:
-
Configure o Discourse para escutar apenas na porta 80 e desabilite o Let’s Encrypt comentando as linhas indicadas em
app.yml:
-
Configure o Discourse para prestar atenção ao cabeçalho do CF,
cloudfront-forwarded-proto, em vez dex-forwarded-proto(que o CF não passa - e estranhamente não pode ser configurado para passar para a origem… que chato!
)
-
Configure sua distribuição do CF com um cname para o nome de host público pretendido (por exemplo,
forum.example.com) usando um certificado AWS ACM (que você gerou). -
Configure a origem do CF usando o IP elástico público do servidor EC2 que hospeda o Discourse (por exemplo,
ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com). Configure-o apenas para http (ou seja, apenas porta 80 - sem 443). você não precisa configurar sua origem com um nome de host sofisticado no DNS comoforum-origin.example.com. O nome de host ou IP do EC2 funciona bem. -
Configure os “comportamentos” do CF para os diferentes caminhos de solicitação. A chave aqui é configurar o comportamento de cache para coisas que são obviamente recursos estáticos; e configurar a não-cache para todo o resto (ou seja, essas solicitações são simplesmente passadas como estão para a origem sem cache). Outra coisa importante aqui é que a última regra de passagem (“padrão”) está usando uma “política de solicitação de origem” personalizada que passa todos os cabeçalhos originais para a origem, além do cabeçalho
cloudfront-forwarded-protodo CF. Configure também redirecionamentos de http para https em seus comportamentos - para que todas as solicitações do usuário final sejam forçadas a ser https pelo CF.
-
Não configure
DISCOURSE_CDN_URL -
Habilite
force https -
Não configure
long polling base url- deixe em branco. Apesar de todos os avisos sombrios sobre isso ser problemático ao passar por um proxy, está funcionando bem para mim até agora. Talvez o keep alive padrão do CF seja longo o suficiente para evitar que ele perca a conexão.
Acho que é isso… ![]()
O resultado final é que todas as solicitações, http/documentos, todos os recursos estáticos de suporte, todas as chamadas ajax, etc., são atendidas no mesmo nome de domínio (por exemplo, forum.example.com). O comportamento de cache (e comportamento de passagem) é ditado por seus “comportamentos” configurados no CF. E todas as conexões são criptografadas usando certificados AWS ACM terminados na borda do CF - e, em seguida, o tráfego não criptografado/http é enviado de volta para o servidor de origem.
Ouso dizer que isso pode ser mais limpo do que o que meta.discourse.org está fazendo no momento
.


