Ошибка возникает при сборке Discourse по HTTP

  1. Настройка домена завершена
  2. Создан экземпляр AWS EC2
  3. Выдан сертификат с использованием ACM
  4. Настроен порт 443 и подключен сертификат через ALB
  5. ALB маршрутизирует трафик домена на экземпляр EC2 через порт 80

Перед сборкой Discourse я изменил файл app.yml, чтобы настроить HTTP-соединения:

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  ## Раскомментируйте следующую строку, чтобы включить слушатель IPv6
  #- "templates/web.ipv6.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

После внесения изменений я собрал Discourse и проверил конфигурацию, но nginx продолжает запрашивать SSL-ключ с следующей ошибкой:

[emerg] 7416#7416: не удалось загрузить сертификат "/shared/ssl/discourse.xxxxxxx.com.cer": PEM_read_bio_X509_AUX() failed (SSL: error:0480006C:PEM routines::no start line:Expecting: TRUSTED CERTIFICATE)

Есть ли способ предотвратить попытку nginx загрузить ключ или заставить nginx корректно работать через HTTP?

Ошибка возникает потому, что Nginx по-прежнему ищет SSL-сертификат, хотя ваш ALB обрабатывает SSL. Вот как это исправить:

  1. Проверьте ваш app.yml: Похоже, вы уже отключили шаблоны SSL, так что этот шаг можно пропустить.

  2. Пересоберите Discourse: Выполните ./launcher rebuild app, чтобы применить изменения.

  3. Проверьте настройки Nginx: Внутри контейнера посмотрите конфигурацию Nginx и убедитесь, что в ней нет строк SSL (ssl_certificate, ssl_certificate_key). Если они есть, удалите их и перезапустите Nginx командой sv restart nginx.

  4. Проверьте настройку вашего ALB: Убедитесь, что ваш ALB завершает SSL-соединение на порту 443 и пересылает HTTP (порт 80) на ваш EC2.

После этого Nginx перестанет искать SSL-сертификат, и всё должно работать корректно через HTTP!

Спасибо. Я решил проблему, опираясь на связанную информацию и другие отзывы.