在下面的行中,我可能有一个特定于站点的configuration文件,其中包含该站点特有的其他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”指令在这里是不允许的…
我认为,而不是分离检查,我可以让包括检查我。
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这样的运行时variables不能被使用,也不能在if语境中使用,就像你发现的那样。
您需要为不同的主机分割server块。 抱歉!
那么,这是相当老,但无论如何,我find了一个解决办法。
我有一个设置与这种风格configuration的虚拟主机:
/etc/nginx/sites-enabled/site.com.conf
而不是检查文件是否存在(这是不可能的),我只是做:
include /etc/nginx/sites-customizations/site.com.*.conf
这样,我可以简单地在sites-customizations文件夹中创build一个文件,按照我的惯例,这个文件名与主configuration相同。 *工作原理与if类似,因为如果没有额外的configuration文件,它不会中断。 如果你喜欢,这也可以让你在单独的文件中添加多个额外的configuration。
我知道这是旧的,但解决scheme可能会帮助像我一样寻找答案的人。
我有一堆的redirect,我只需要包括一个特定的主机,而include不允许在if指令,我最终添加, if在文件中,我包括…
所以我有一个include /etc/nginx/conf.d/redirects和我有:
if ($host = "www.example.com") { # Some conf or redirects for this site only. }