以下の行では、Imightに、サイト固有の追加の 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
ブロックを分割する必要があります。ごめんなさい!
まあ、これはかなり古いですが、とにかく回避策を見つけました。
このスタイルで構成されたvhostsのセットアップがあります。
/etc/nginx/sites-enabled/site.com.conf
ファイルが存在するかどうかを確認するのではなく(不可能です)、次のようにします。
include /etc/nginx/sites-customizations/site.com.*.conf
このようにして、sites-customizations
- folderは、私の慣例により、メイン構成と同じ名前が付けられています。 *
は、ifとほとんど同じように機能します。追加の構成ファイルがない場合でも機能します。必要に応じて、別のファイルに複数の追加設定を追加することもできます。
私はinclude
ディレクティブでnginxによって使用されているglob()
関数パターン拡張を利用しており、私のDebianサーバーでうまく機能します。
あなたの場合、この行を置き換えてみてください:
include /path/www/$Host/nginx.conf;
これで:
include /path/www/<hostname>/nginx[.]conf;
これは1つのファイルのみに一致するファイルマスクであり、ファイルが存在しない場合でもnginxは不平を言いません。ただし、includeディレクティブでは変数を使用できないため、<hostname>
に固定値を指定する必要があります。個々の.confファイル(vhostごとに1つ)を生成するスクリプトを作成する必要がありました。
Gerald Schneider が指摘したように、私は$Host
を置換で保持することを提案していましたが、これは許可されていません。上記の提案を変更しました。
私はこれが古いことを知っていますが、解決策は私がしたように答えを探している誰かを助けるかもしれません。
特定のホストのみに含める必要のあるリダイレクトの束があり、include
はif
ディレクティブでは許可されていませんが、最終的にif
を含めていたファイル...
だから私はinclude /etc/nginx/conf.d/redirects
そしてそのファイルの中に私が持っています:
if ($Host = "www.example.com") {
# Some conf or redirects for this site only.
}