Я создаю образ докера, который динамически создает конфигурацию nginx на основе переменных среды. Я хотел бы минимизировать количество требуемых переменных среды.
У меня есть файл шаблона конфигурации, который выглядит примерно так:
server {
...
$ALLOW_DENY
...
}
И я бы хотел настроить шаблон вот так
export ALLOW_DENY="allow 11.11.11.11; deny all;"
envsubst '\$ALLOW_DENY' < sites-available/site.template > sites-available/my-site
Моя проблема в том, что я не хочу создавать несколько переменных среды для каждого оператора allow или deny (для некоторых конфигураций этого файла может потребоваться ничего, а для других - 5 или 6), но я не могу найти способ сделать envsubst
принимать символы новой строки, и я не уверен, разрешено ли несколько команд nginx в одной строке.
Для справки я собираюсь загрузить все свои переменные среды, используя aws ssm
и я не думаю, что он принимает такие многострочные переменные среды:
export $ALLOW_DENY=" allow 11.11.11.11;
deny all;"
Это действительно так?
server {
...
allow 11.11.11.11; deny all;
...
}
Да. Хотя я настоятельно рекомендую обильно использовать пробелы, разрывы строк и include
операторы для повышения читабельности - в конечном итоге Вы можете пропустить разрывы строк там, где это удобно - nginx обрабатывает разрывы строк только для того, чтобы указать на строку, в которой произошли ошибки парсера конфигурации.
Файлы конфигурации nginx - это не что иное, как директивы, разделенные точкой с запятой, в блоках, разделенных фигурными скобками - разрывы строк не имеют значения, кроме того, что они анализируются аналогично пробелам и табуляциям:
Простая директива состоит из имени и параметров, разделенных пробелами, и заканчивается точкой с запятой (;). Блочная директива имеет ту же структуру, что и простая директива, но вместо точки с запятой она заканчивается набором дополнительных инструкций, заключенных в фигурные скобки ({и}).
Единственная причина, по которой вы не хотите размещать слишком много настроек в одной строке, - это удобочитаемость, а комментарии возможны только на строчной основе:
Оставшаяся часть строки после знака # считается комментарием.