问题

问题

问题

我正在创建一个docker镜像,它根据环境变量动态创建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

我的问题是我不想为每个允许或拒绝语句创建多个环境变量(此文件的某些配置可能不需要,而其他配置可能需要 5 或 6 个),但我找不到接受envsubst换行符的方法,并且我不确定一行上是否允许多个 nginx 命令。

作为参考,我将使用加载所有环境变量aws ssm,并且我认为它不接受像这样的多行环境变量:

export $ALLOW_DENY="  allow 11.11.11.11;
  deny all;"

总结

这有效吗?

server {
...
  allow 11.11.11.11; deny all;
...
}

答案1

是的。虽然我强烈建议大量使用空格、换行符和include语句来提高可读性——但最终您可以自行决定是否在方便时跳过换行符- nginx 仅对换行符进行特殊处理,以便能够指出配置解析器发生错误的行。

nginx 配置文件只不过是用花括号分隔的块中的分号分隔的指令 - 除了与空格和制表符类似地进行解析之外,换行符无关紧要:

简单指令由空格分隔的名称和参数组成,以分号 (;) 结尾。块指令具有与简单指令相同的结构,但它以一组附加指令(用括号 ({ 和 }) 括起来)而不是分号结尾。

您不希望在一行中写太多配置的唯一原因是可读性 - 而且注释只能按行进行:

# 符号后面的其余行被视为注释。

Nginx 初学者指南

相关内容