O proxy_set_header X-Forwarded-Proto https; simples funcionaria?
A solicitação http/s vem do contêiner para o servidor IDP para Discourse ID na internet. Não há instância entre onde eu poderia adicionar/alterar quaisquer cabeçalhos de solicitação.
IMHO e assumindo que “Discourse ID” é apenas OAuth padrão, a maneira correta seria ou
a) uma opção de configuração para o Discourse ID onde eu poderia adicionar um endpoint de configuração “well-known” que tenha todos os valores de configuração OIDC necessários, incluindo o prefixo “https://…”.
b) o mesmo, mas já codificado no código
Ainda estou quebrando a cabeça com os detalhes técnicos do Discourse ID …
Você pode consultar os detalhes do Discourse ID em nosso código, o protocolo que usamos está todo em nosso repositório Github. A única diferença em relação a outras implementações OAuth é que registramos uma instância automaticamente. E durante esse registro automático, garantimos que a instância que solicita o registro é quem diz ser e está em https (nos dias de hoje, nenhuma instância do Discourse deve estar em http://).
Os erros http que compartilhei acima me dizem que seu site não está configurado corretamente.
Você pode verificar a saída do seguinte via console:
Discourse.base_url
SiteSetting.force_https
Se você obtiver uma URL http:// do primeiro comando e false do segundo, talvez você queira definir SiteSetting.force_https = true e ver se isso resolve. (No entanto, isso também pode quebrar coisas se a configuração estiver incorreta em outros lugares. Cuidado.)
Olá Penar,
talvez precisemos esclarecer os detalhes da minha configuração primeiro. Ela é um pouco diferente em comparação com a implantação padrão.
- balanceador de carga central (https://www.haproxy.org/) atuando como acelerador SSL para alguns serviços web diferentes (não apenas para o Discourse). O acesso da Internet a qualquer um desses serviços só é permitido via https. A mudança de http para https é feita no próprio balanceador de carga, veja Redirect HTTP to HTTPS in a Few Easy Steps with HAProxy como referência)
- o haproxy encaminha as requisições front-end para o backend em uma rede privada (10.x.x.x) sem criptografia. Esse tráfego termina em um nginx local no host do docker.
- o nginx encaminha as requisições para o socket http do contêiner web_only com
proxy_pass ``http://unix``:/mnt/data/discourse/shared/web-only/nginx.http.sock
(Estou usando uma configuração de dois contêineres com web_only.yml e data.yml). Veja templates/web.socketed.template.yml como referência
Eu não preciso de SiteSetting.force_https, pois toda a criptografia https é feita fora do contêiner do Discourse. Eu já uso OAuth com base no plugin Discourse OpenID Connect (OIDC) e com meu próprio IDP. O plugin Discourse OIDC contém uma configuração para o “well-known” OpenID Connect discovery document. No meu caso: https://login.netzwissen.de/realms/netzwissen/.well-known/openid-configuration
Se o Discourse ID implementasse algo semelhante para o link entre a instância do contêiner Discourse e o IDP do Discourse ID, não haveria problemas. Como o “Discourse ID” usa um IDP fixo, tal “URL well-known” poderia até ser codificada, incluindo o prefixo https.
Thomas, desculpe, não posso realmente ajudá-lo com sua configuração específica. Tudo o que posso dizer é que algo em sua instância está incorreto.
Bem, o console JS em seu site não acha que a criptografia https fora do contêiner está cobrindo tudo. Esses avisos JS que compartilhei acima são sintomas de um problema semelhante que você está tendo com o ID, o próprio Discourse em sua configuração pensa que está rodando em http e isso é um problema, pois ele gerará URLs em http em alguns casos.
Peço imensas desculpas:
Comparei as configurações em nossa instância produtiva (PROD) com as da instância DEV. Apenas a instância DEV tinha a configuração force_https desativada. E isso só funcionou porque temos o acelerador SSL haproxy na frente dela.
Agora ativei a configuração SiteSetting.force_http na instância DEV e o Discourse ID funciona bem. Assim, também implantarei o Discourse ID em nossa instância PROD (forum.netzwissen.de).
Desculpe pela confusão.
Sem problemas, fico feliz que tenha sido resolvido. Obrigado por acompanhar!