Я видел несколько руководств, объясняющих, как это сделать, но все они описывают разные подходы, что меня не устраивает. Можно ли настроить виртуальный хост Apache для Discourse так, чтобы конкретный домен перенаправлял на это приложение, точно так же, как это делается для других веб-сайтов и соответствующих доменов?
Если вы не знакомы с этим (и не хотите разбираться), я настоятельно рекомендую отказаться от Apache и запускать только Discourse на VPS. Если вам нужно запускать дополнительные службы, выделите отдельный VPS для Apache и другой — для Discourse.
Итак, я переключился на Nginx, и всё работает. Я считаю, что SSL настроен правильно, но в Chrome появляется сообщение «Ваше соединение с этим сайтом не полностью защищено». Принудительный HTTPS включён.
SSL настроен для службы nginx внутри контейнера. Если контейнер доступен из интернета и вы обращаетесь к нему напрямую через браузер (стандартная установка Discourse), то SSL будет работать.
Однако, если вы размещаете обратный прокси-сервер перед ним (будь то Apache, Nginx или сторонний сервис, например Cloudflare), вам необходимо обеспечить безопасность соединения между браузером и обратным прокси-сервером.
Таким образом, в вашем случае вам нужно будет сгенерировать сертификаты для обратного прокси-сервера nginx (я не думаю, что вам нужно добавлять шаблоны SSL из Discourse, поскольку контейнер не доступен напрямую из интернета; вы можете это сделать, но это не обязательно).
Вы можете ознакомиться с инструкциями по настройке этого с помощью Let’s Encrypt (бесплатно, тот же сервис, что используется в стандартной установке Discourse, но в данном случае для nginx вне контейнера).
Кратко: обратный прокси-сервер nginx требует настройки SSL. Внутренний nginx в контейнере не требует SSL (при условии, что вы обращаетесь к нему с той же машины).
(Или вы можете открыть другие порты, например 8080:80 и 8443:443, и вместо использования сокета на следующем шаге перенаправлять запросы на upstream, указывающий на localhost:80 и/или localhost:443)
Убедитесь, что файлы SSL-сертификата находятся в директории /var/discourse/shared/standalone/ssl/. Есть ли они у вас? Предполагаю, что вы уже владеете доменом a1rp.xyz и ознакомились с инструкциями по генерации SSL-сертификатов на сайте Let’s Encrypt. Также имейте в виду, что в стандартной установке Discourse автоматически обновляет сертификаты, но в вашем случае вам придётся делать это самостоятельно (например, с помощью cron), иначе сертификаты истекут через 3 месяца.
Да, у меня в конфигурации приложения есть всё, что вы перечислили (включая пост с исправлением некоторых моментов). Что касается двоеточия (:), я не думаю, что это имеет значение. Был пост, где говорилось, что двоеточие там тоже быть не должно. SSL-файлы у меня уже есть.
Так что я решил проблему. Кто-то упомянул, что фавикон отображается по HTTP, из-за чего возникала ошибка. Я загрузил что-то другое и удалил его, теперь сайт полностью работает по HTTPS