Он выключен. X-Forwarded-Proto указан в моём блоке сервера. Таким образом, единственный элемент (или элементы), который я не использую, судя по ссылкам, которые вы все предоставили, — это:
# базовые шаблоны, используемые; можно сократить, включив меньше функциональности в шаблоны контейнеров: # - "templates/cron.template.yml" # cron теперь включён в базовый образ - "templates/postgres.template.yml" - "templates/redis.template.yml" - "templates/sshd.template.yml" - "templates/web.template.yml" # - "templates/web.ssl.template.yml" # удалить - HTTPS будет обрабатываться внешним nginx - "templates/web.ratelimited.template.yml" - "templates/web.socketed.template.yml" # <-- Добавлено # какие порты открывать? # expose: закомментируйте весь раздел
Я загрузил сайт в трёх браузерах (Edge, Firefox и Chrome Mobile), и как аноним получил абсолютно валидный сертификат. Какие ваши шаги для воспроизведения этой проблемы?
Ваши письма никогда не доходят до моего почтового ящика. Я пробовал(а) отправить их повторно, но безрезультатно. Вы просто вручную активируете аккаунты?
Ад не обрушился здесь. Одна из возможных проблем заключается в том, что в ваших письмах всё ещё содержатся ссылки с http://. Однако я был корректно перенаправлен на сайт по протоколу https для активации моей учётной записи, и я не вижу никаких ошибок, связанных с SSL.
В моем блоке сервера настроено перенаправление, поэтому не имеет значения, какая ссылка там отображается. В любом случае оно всегда перенаправит на https.
Вы ошибаетесь. Если включено принудительное использование HTTPS, Discourse должен отправлять все ссылки через HTTPS. Каждая ссылка, связанная с форумом, должна загружаться по HTTPS. Если вы продолжаете делать странные вещи и не следуете рекомендованному способу, вы остаетесь наедине с собой. Мы не можем помочь дальше стандартных процедур, которые работают.
Для меня это не совсем логично. Если мы разберём это с точки зрения логики, то я по сути делаю ровно то, для чего предназначено force-https, но в блоке сервера.
force_https — это не просто переписывание. Внутри он делает гораздо больше. Если вы хотите, чтобы ваши проблемы были решены, решение уже предложено. Если вы отвергаете это решение, не стесняйтесь взять дело в свои руки и исследовать новые пути.
Это связано с вашим ненадёжным обратным прокси. Вам предстоит выяснить, что не так, и сделать всё правильно. Мы не можем оказывать поддержку вашим собственным решениям.
Все представленные «решения» не подходят для моего конкретного случая использования:
Удалённый сервер (в той же сети) — я полагаю, что все примеры предполагают, что Nginx запущен на том же сервере, что и Discourse, а я использую proxy_pass для обращения к другому внутреннему IP-адресу.
Почему я так сделал? Повышенная безопасность и распределение ресурсов. Это та же причина, по которой я разделяю сервисы двумя способами: с помощью контейнеров и виртуальных машин. Предложенная документация, кажется, ориентирована на ситуацию, когда все сервисы работают на одном сервере.
Я предполагаю, что описанные выше условия довольно распространены. Если какое-либо из них может быть использовано для поддержки условия proxy_pass, я с радостью внесу необходимые изменения в свои настройки. Мне просто кажется, что давать общее заявление «вы сами по себе» только потому, что я пытаюсь избежать ситуации «не класть все яйца в одну корзину», немного необоснованно.
Это влечёт за собой целый ряд последствий, выходящих за рамки того, что вы только что написали, и мне предстоит это изучить — мы могли бы начать с этого.
Немедленные вопросы:
В app.yml изменить порт по умолчанию на 8080?
Что насчёт SSL на порту 443? Оставить 443?
Убрать редирект с порта 80 в блоке сервера Nginx?
Имеет ли значение пункт 3, если я просто меняю proxy_pass на внутренней стороне? Наверное, нет? Я ведь просто перенаправляю на 8080?
Самый главный вопрос: зачем? Почему это должно что-то изменить, если перейти с порта 80 на 8080?
Оставить все остальные шаблоны активными? Просто закомментировать socketed?
Поведение, которое я наблюдаю, возникает при указанных выше условиях.
Начало файла app.yml выглядит следующим образом:
## это шаблон контейнера Docker Discourse «всё в одном» (standalone) ## ## После внесения изменений в этот файл ВЫ ДОЛЖНЫ выполнить пересборку ## /var/discourse/launcher rebuild app ## ## БУДЬТЕ *ОЧЕНЬ* ОСТОРОЖНЫ ПРИ РЕДАКТИРОВАНИИ! ## YAML-ФАЙЛЫ ЧРЕЗВЫЧАЙНО ЧУВСТВИТЕЛЬНЫ К ОШИБКАМ В ПРОБЕЛАХ И ВЫРАВНИВАНИИ! ## используйте http://www.yamllint.com/ для проверки файла при необходимости
templates: - "templates/postgres.template.yml" - "templates/redis.template.yml" - "templates/web.template.yml" - "templates/web.ratelimited.template.yml" ## Раскомментируйте эти две строки, если хотите добавить Lets Encrypt (https) #- "templates/web.ssl.template.yml" #- "templates/web.letsencrypt.ssl.template.yml"
## какие TCP/IP-порты должен открывать этот контейнер? ## Если вы хотите, чтобы Discourse использовал тот же порт, что и другой веб-сервер, например Apache или nginx, ## см. https://meta.discourse.org/t/17247 для деталей expose: - "80:80" # http - "443:443" # https
## Установите db_shared_buffers на максимум 25% от общего объема памяти. ## значение будет установлено автоматически при загрузке на основе обнаруженного объема ОЗУ, либо вы можете переопределить его db_shared_buffers: "1024MB"
## может улучшить производительность сортировки, но увеличивает потребление памяти на подключение #db_work_mem: "40MB"
## Какую ревизию Git должен использовать этот контейнер? (по умолчанию: tests-passed) #version: tests-passed
Вы подключаетесь к порту 80 на втором nginx, поэтому он считает, что вы используете http, а не https.
Попробуйте найти X-Forwarded-Proto во внутреннем nginx и изменить proxy_set_header X-Forwarded-Proto $thescheme; на proxy_set_header X-Forwarded-Proto https;
или перенаправьте ваш трафик на https: proxy_pass https://192.168.86.108