Привет, Пенар,
возможно, нам сначала стоит уточнить детали моей конфигурации. Она немного отличается от стандартного развёртывания.
- Центральный балансировщик нагрузки (https://www.haproxy.org/), выступающий в роли SSL-акселератора для нескольких веб-сервисов (не только Discourse). Доступ из Интернета к любым из этих сервисов разрешён только через HTTPS. Переход с HTTP на HTTPS осуществляется непосредственно на балансировщике нагрузки, см. Redirect HTTP to HTTPS in a Few Easy Steps with HAProxy для справки.
- HAProxy пересылает фронтенд-запросы на бэкенд в частной сети (10.x.x.x) без шифрования. Этот трафик завершается на локальном nginx на хосте Docker.
- Nginx пересылает запросы на HTTP-сокет контейнера web_only с помощью
proxy_pass ``http://unix``:/mnt/data/discourse/shared/web-only/nginx.http.sock
(Я использую двухконтейнерную конфигурацию с файлами web_only.yml и data.yml). См. templates/web.socketed.template.yml для справки.
Мне не требуется SiteSetting.force_https, так как всё шифрование HTTPS выполняется вне контейнера Discourse. Я уже использую OAuth на основе плагина Discourse OpenID Connect (OIDC) и свой собственный IDP. В плагине Discourse OIDC есть настройка для «well-known» документа обнаружения OpenID Connect. В моём случае это: https://login.netzwissen.de/realms/netzwissen/.well-known/openid-configuration.
Если бы функция Discourse ID реализовывала нечто подобное для связи между экземпляром контейнера Discourse и IDP Discourse ID, проблем бы не возникло. Поскольку «Discourse ID» использует фиксированный IDP, такой «well-known URL» можно даже зашить в код, включая префикс https.