Serve Discourse from a subfolder (path prefix) instead of a subdomain

Как отредактировать nginx/discourse.conf

Считаю, что любые изменения в discourse.conf внутри контейнера всё равно будут отменены при выполнении пересборки.

Чтобы сохранить изменения, их необходимо каким-то образом добавить в конфигурацию вашего контейнера — например, в web_only.yml:

# […]
## Помните, это синтаксис YAML — у вас может быть только один блок с данным именем
run:
  - exec: echo "Начало пользовательских команд"
# […]
  - replace:
      filename: /etc/nginx/conf.d/discourse.conf
      from: $proxy_add_x_forwarded_for
      to: $http_x_real_ip
      global: true
# […]

Как отладить установку Discourse в подпапке

В установке Discourse в подпапке вызов к Discourse выглядит следующим образом:
example.org/forum[Внешний прокси для example.org]/path-to-discourse/discourse/shared/web-only/nginx.http.sock[Nginx в веб-контейнере Discourse]

Таким образом, если возникает ошибка, сначала необходимо определить её источник:

  • Внешний прокси
  • Nginx в контейнере Discourse
  • Сам Discourse

Внешний прокси

  • Откройте его в браузере и проверьте результат.
  • Проверьте логи ошибок внешнего прокси.

Nginx в контейнере Discourse

  1. Подключитесь по SSH к вашему веб-серверу.
  2. Подключитесь напрямую к сокету через curl.
  3. Отладьте вывод curl и логи Nginx в контейнере Discourse.

Важно: используйте URL http, а не https.

curl -I --unix-socket /path-to-discourse/discourse/shared/web-only/nginx.http.sock http://www.example.org/forum/

Если это работает, попробуйте выполнить реальный вызов, например:

curl --unix-socket /path-to-discourse/discourse/shared/web-only/nginx.http.sock \
-H "user-agent: Chrome/88.0.4324.182" \
-H "Accept-Encoding: gzip" \
http://www.example.org/forum/t/test-thread/12345 --output test-encoded.html.gz
3 лайка