Резюме
Начиная с этого коммита, конфигурация nginx по умолчанию для Discourse включает так называемые «outlets» (точки вставки) — поддерживаемый способ добавления дополнительных директив в конфигурацию nginx в соответствующих местах.
Это изменение позволяет перейти к более надежному подходу к управлению конфигурацией и поведением веб-сервера, тогда как ранее мы полагались на относительно хрупкие команды поиска и замены.
Со временем мы адаптируем наши собственные шаблоны конфигурации для использования outlets.
Использование
Существует три поддерживаемых раздела outlets:
before-server: директивы конфигурации контекстаhttpserver: директивы конфигурации контекстаserverdiscourse: директивы конфигурации контекстаlocation— они применяются к запросам, перенаправляемым в Discourse
Примеры
Ниже приведено несколько примеров того, как использовать эти outlets в вашем файле конфигурации app.yml для достижения поставленных целей.
Их можно добавлять в любом месте, где можно использовать команду run или file; я рекомендую делать это в хуке after_code, чтобы сборка могла быстро завершиться ошибкой, если в синтаксисе есть проблемы.
Добавление заголовка ответа
Этот пример добавляет заголовок к каждому ответу, пересылаемому в Discourse:
hooks:
after_code:
- file:
path: /etc/nginx/conf.d/outlets/discourse/clacks-overhead.conf
chmod: 444
contents: |
add_header x-clacks-overhead "GNU Terry Pratchett";
Результат:
○ → curl -I https://example.contoso.com/
HTTP/2 200
…
x-clacks-overhead: GNU Terry Pratchett
Добавление статического файла по одному пути
Этот пример добавляет статический файл, обслуживаемый nginx по одному пути, вне обычного дерева Discourse.
hooks:
after_code:
- file:
path: /etc/nginx/conf.d/outlets/server/well-known-important-file.conf
chmod: 444
contents: |
location = /.well-known/important-file {
default_type application/json;
root /var/www/static/;
}
- file:
path: /var/www/static/.well-known/important-file
chmod: 444
contents: |
{"content-free":true}
Результат:
○ → curl -i https://example.contoso.com/.well-known/important-file
HTTP/2 200
server: nginx
date: Fri, 07 Mar 2025 23:22:38 GMT
content-type: application/json
content-length: 22
last-modified: Fri, 07 Mar 2025 23:12:08 GMT
strict-transport-security: max-age=63072000
accept-ranges: bytes
{"content-free":true}