Nginx
你如何有條件地在 Nginx vhost 中包含文件?
在下面的行中,我可能有一個特定於站點的配置文件,其中包含該站點獨有的附加fastcgi_params 。如果此文件存在,我想載入它。
server { listen 80 default; server_name _; root /path/www/$host; # Pass PHP scripts to php-fastcgi listening on port 9000 location ~ \.php { include fastcgi_params; fastcgi_pass 127.0.0.1:9000; if (-f /path/www/$host/nginx.conf) { include /path/www/$host/nginx.conf; } } }
但是,這不起作用,我得到的錯誤是:
nginx:
$$ emerg $$此處不允許使用“include”指令…
更新
我認為與其單獨檢查,不如讓include為我檢查。
server { listen 80 default; server_name _; root /path/www/$host; # Pass PHP scripts to php-fastcgi listening on port 9000 location ~ \.php { include fastcgi_params; fastcgi_pass 127.0.0.1:9000; include /path/www/$host/*.nginx; } }
但是,這似乎不起作用。
include
在伺服器啟動期間做它的事情 -正如您所發現的那樣$host
,不能使用執行時變數,也不能在上下文中使用。if
您需要
server
為不同的主機拆分塊。對不起!
好吧,這已經很老了,但是無論如何,我找到了解決方法。
我有一個以這種風格配置的虛擬主機的設置:
/etc/nginx/sites-enabled/site.com.conf
而不是檢查文件是否存在(這是不可能的),我只是這樣做:
include /etc/nginx/sites-customizations/site.com.*.conf
這樣,我可以簡單地在
sites-customizations
-folder 中創建一個文件,按照我的約定,該文件的名稱與主配置相同。它的*
工作原理很像 if,因為如果沒有額外的配置文件,它不會中斷。如果您願意,這也使您能夠在單獨的文件中添加多個額外的配置。