动态包含 vhosts 的 Nginx 配置片段

动态包含 vhosts 的 Nginx 配置片段

我尝试使用 nginx 配置虚拟主机,无论是否对每个虚拟主机进行额外的配置。我想到的是这样的:

server {
    listen 81; 
    server_name ~^(www\.)?(?<sname>.+?)$;
    root /var/www/$sname;
    include /etc/nginx/sites/$sname;
    access_log /var/log/nginx/$sname/access.log;
    error_log /var/log/nginx/$sname/error.log;
}

然后我可以touch /etc/nginx/mysite.example.com添加一个带有静态 html 的新站点,同时我可以编辑 vhost 的文件以添加例如反向代理指令或一些重写规则。

问题是,nginx 似乎在启动时包含了配置。如果使用类似这样的配置,会更简洁

for $config in /etc/nginx/sites:
    {
        server_name $config
        root /var/www/$config
        include $config
        [...]
    }

它应该在开始时运行,而不是在第一次向虚拟主机发出请求时运行。

答案1

我仍然不知道是否可以包含脚本,但我正在使用脚本生成静态配置,现在使用 jinja2 作为模板系统。

使用自己的脚本的替代方法是使用 ansible 模板模块。使用 ansible 时,创建一个大型配置比创建许多片段要快得多,这不会造成任何损害,因为 ansible 使用的模板仍然可以是创建自动生成配置时连接的小片段。

相关内容