Nginx не слушает IPv6, если не используется HTTPS

Я настроил тестовый сервер во внутренней сети (к которому нельзя подключиться извне, поэтому невозможно настроить Let’s Encrypt), и обнаружил, что nginx не слушает IPv6, даже если у сервера есть IPv6-адрес. В файле /etc/nginx/conf.d/discourse.conf внутри контейнера указано listen 80;, но отсутствует listen [::]:80;.

У меня есть ещё один производственный сервер, который нормально доступен по IPv6. Я поискал в Meta, чтобы понять, что не так с конфигурацией моего тестового сервера. В итоге выяснилось, что IPv6 работает нормально только если добавить web.letsencrypt.ssl.template.yml и web.ssl.template.yml в мой app.yml. Причина в том, что эти файлы добавляют listen [::]:80; и listen [::]:443 ssl http2; в конфигурационный файл nginx.

Команда может добавить поддержку IPv6 для установок без HTTPS, то есть добавить listen [::]:80; в web.template.yml.

Discourse в основном не работает без HTTPS. Возможно, они не добавят запрашиваемую вами функцию. Однако вы можете изучить шаблон SSL, чтобы увидеть, что необходимо включить для активации IPv6, и добавить этот код в свой собственный шаблон или в файл app.yml.

Да, я попробовал добавить в app.yml вот так, и это сработало.

hooks:
  after_web_config:
    - replace:
        filename: "/etc/nginx/conf.d/discourse.conf"
        from: /listen.+$/
        to: |
          listen 80;
          listen [::]:80;