![问题](https://linux22.com/image/741231/%E9%97%AE%E9%A2%98.png)
问题
我正在创建一个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 配置文件只不过是用花括号分隔的块中的分号分隔的指令 - 除了与空格和制表符类似地进行解析之外,换行符无关紧要:
简单指令由空格分隔的名称和参数组成,以分号 (;) 结尾。块指令具有与简单指令相同的结构,但它以一组附加指令(用括号 ({ 和 }) 括起来)而不是分号结尾。
您不希望在一行中写太多配置的唯一原因是可读性 - 而且注释只能按行进行:
# 符号后面的其余行被视为注释。