Nginx

你如何有條件地在 Nginx vhost 中包含文件?

  • January 4, 2018

在下面的行中,我可能有一個特定於站點的配置文件,其中包含該站點獨有的附加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,因為如果沒有額外的配置文件,它不會中斷。如果您願意,這也使您能夠在單獨的文件中添加多個額外的配置。

引用自:https://serverfault.com/questions/351710