我尝试使用 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 使用的模板仍然可以是创建自动生成配置时连接的小片段。