我在Debian上使用nginx。因此,除了在主配置文件/etc/nginx/nginx.conf有文件夹的/ etc/nginx的/网站可用/与虚拟主机配置文件和/ etc/nginx的/ /与链接到虚拟主机主动启用的站点 - 。使用虚拟主机模板
所以让我先问我的问题。因为解释是漫长的,也许你并不需要阅读它...
我希望能够使用多个虚拟主机模板是这样的:
server {
listen 80;
server_name ~^(?<project>.+)\.(?<area>.+)\.loc$;
if ($host ~ ^(?<project>.+)\.(?<area>.+)\.loc$) {
set $folder "$area/$project";
}
...
access_log /var/log/nginx/$area/$project.access.log;
error_log /var/log/nginx/error.log;
...
root /var/www/$folder/;
...
}
和定义哪个虚拟主机基于哪个模板。此外,有可能“扩展”模板会很棒,因此我可以将新设置添加到我的虚拟主机,并重新定义从模板继承的设置。
我怎样才能实现呢?
我目前的虚拟主机的文件结构是这样的:
的/ etc/nginx的/位,可包含下列文件:
默认值(默认的虚拟主机)斧常见的虚拟主机(虚拟主机模板) test.sandbox.loc(基于模板ax-common-vhost的虚拟主机;它包括与
include
规则)...和其他一些...
的/ etc/nginx的/位,可包含下列文件:
默认 - >的/ etc/nginx的/网站可用/默认test.sandbox.loc - > 的/ etc/nginx的/ sites-可用/ test.sandbox.loc ......以及一些进一步 的...
模板斧常见的虚拟主机定义像根文件夹选项的一些动态,使用服务器名称:
server {
listen 80;
server_name ~^(?<project>.+)\.(?<area>.+)\.loc$;
if ($host ~ ^(?<project>.+)\.(?<area>.+)\.loc$) {
set $folder "$area/$project";
}
...
access_log /var/log/nginx/$area/$project.access.log;
error_log /var/log/nginx/error.log;
...
root /var/www/$folder/;
...
}
所以,当我想创建一个新的虚拟主机,我只需要创建一个新的虚拟主机文件,并给它一个链接 - 并且不需要复制粘贴&的设置和手动设置的路径。我只需要遵循约定,即主机%project%。%area%.loc已经被放置在[my webroot] /%area%/%project%
我认为它适用于包含规则:服务器获取一个请求xyloc,查找一个名为so的文件,打开文件,并最终处理其中的指令(所以include指令和包含的模板的全部内容)。
但它并非如此。 Nginx的似乎只是扫描整个文件夹的/ etc/nginx的/网站可用/(按字母顺序?),并在第一个文件按住/ server
指令在请求的主机名称等于/ maches来。
这就是说,通过包括
include /etc/nginx/sites-available/ax-common-vhost;
不被使用。实际上,我已经从vhost文件中删除了包含指令 - 而且没有任何改变!
这是一个问题。因为当我添加一个新的模板,例如我的Zend框架项目([项目根] /公/根):
文件AX-ZF的虚拟主机
server {
listen 80;
server_name ~^(?<project>.+)\.(?<area>.+)\.loc$;
if ($host ~ ^(?<project>.+)\.(?<area>.+)\.loc$) {
set $folder "$area/$project";
}
...
access_log /var/log/nginx/$area/$project.access.log;
error_log /var/log/nginx/error.log;
...
root /var/www/$folder/public/;
...
}
...,它被忽略,因为服务器没有得到有关vhost myzf.sandbox.loc基于ax-zf-vhost的任何信息。取而代之,它只是循环/ etc/nginx/sites-available /文件夹,找到ax-common-vhost,myzf.sandbox.loc与模式^(?。+)。(?。+)。loc $,而nginx使用ax-common-vhost作为myzf.sandbox.loc。
这个问题怎么解决?
谢谢