我在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。
這個問題怎麼解決?
謝謝