Официальное заявление Discourse о настройке подпапок
Мы поддерживаем настройку подпапок для наших хостинговых клиентов на уровне Enterprise и выше. Из-за высокой технической сложности настройки мы настоятельно рекомендуем не использовать эту конфигурацию, если вы не обладаете значительным опытом в настройке пользовательских подпапок.
Критически важно, чтобы вы имели глубокое понимание
- Настройки NGINX в контейнере Docker Discourse
- Безопасной передачи исходного IP-адреса с помощью пользовательских заголовков в цепочке прокси
- Ограничения частоты запросов (rate limiting) на внешнем прокси-сервере
Если все это звучит для вас странно и непонятно, мы настоятельно рекомендуем избегать такой настройки.
Чтобы разместить Discourse в подпапке (так называемый префикс пути) на вашем домене, например https://www.example.com/=SUBFOLDER=, следуйте этой инструкции.
Конфигурация Docker
В разделе env вашего YAML-файла контейнера Docker добавьте параметр DISCOURSE_RELATIVE_URL_ROOT с именем подпапки, которую вы хотите использовать. Убедитесь, что он не заканчивается символом /.
Редактирование этого поля обновит все руководство.
env:
...
DISCOURSE_RELATIVE_URL_ROOT: /=SUBFOLDER=
Раздел run требует некоторых изменений, чтобы направлять все маршруты Discourse в нужное место. Вот полный раздел run с поддержкой подпапок:
run:
- exec:
cd: $home
cmd:
- mkdir -p public/=SUBFOLDER=
- cd public/=SUBFOLDER= && ln -s ../uploads && ln -s ../backups
- replace:
global: true
filename: /etc/nginx/conf.d/discourse.conf
from: proxy_pass http://discourse;
to: |
rewrite ^/(.*)$ /=SUBFOLDER=/$1 break;
proxy_pass http://discourse;
- replace:
filename: /etc/nginx/conf.d/discourse.conf
from: etag off;
to: |
etag off;
location /=SUBFOLDER= {
rewrite ^/=SUBFOLDER=/?(.*)$ /$1;
}
- file:
path: /etc/nginx/conf.d/outlets/server/set-real-ip-from-webroot.conf
chmod: 644
contents: |
set_real_ip_from 123.456.789.ABC; # IP-адрес вашего внешнего прокси-сервера
- file:
path: /etc/nginx/conf.d/outlets/server/real-ip-header.conf
chmod: 644
contents: |
real_ip_header x-forwarded-for;
Подробнее о сохранении IP-адреса конечного пользователя см. по адресу Handling the "chain of trust" of the end user's real IP.
После внесения этих изменений выполните bootstrap контейнера Docker как обычно, или пересоберите его, если вы изменяете существующий контейнер.
./launcher bootstrap app
или
./launcher rebuild app
Прилагается полный пример YAML-файла для автономного контейнера:
subfolder-sample.yml (3.1 КБ)
Вопросы ограничения частоты запросов
Если вы выбираете эту настройку, вам, вероятно, потребуется ограничивать частоту запросов до того, как они достигнут NGINX в контейнере. Это означает, что вам, скорее всего, придется отказаться от использования нашего шаблона ограничения частоты запросов. Настроить NGINX в контейнере для ограничения по переназначенному IP-адресу очень сложно, и это потребует сложных изменений в шаблоне.
Существующие сообщения
Если вы выполнили это на существующем сайте, который ранее находился в поддомене, вы обнаружите, что ваши загрузки (uploads) перестали работать. Существует инструмент, который поможет исправить все пути, добавив в них подпапку. Сначала войдите в контейнер Docker и перейдите в каталог Discourse:
cd /var/discourse
./launcher enter app
cd /var/www/discourse
Затем выполните команду remap после создания резервной копии:
RAILS_ENV=production bundle exec script/discourse remap '/uploads' '/=SUBFOLDER=/uploads'
См. также: Use a subfolder (path prefix) to serve Discourse with multiple servers sharing a domain для более экзотических настроек.
robots.txt
Теперь, когда Discourse работает в подпапке, он не может предоставлять свой файл robots.txt для управления тем, какие маршруты сканируются веб-роботами. Роботы будут обращаться к файлу robots.txt вашего основного сайта (https://www.example.com/robots.txt). Вам необходимо скопировать содержимое файла robots.txt Discourse (находится по адресу https://www.example.com/=SUBFOLDER=/robots.txt) и вставить его в файл robots.txt вашего основного сайта.

