Nginx vhostに条件付きでファイルを含めるにはどうすればよいですか?


12

以下の行では、私は可能性がある追加の含むサイト固有の設定ファイル持って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」ディレクティブはここでは使用できません...

更新

私はむしろseparatlyチェックするよりも、私は聞かせできると思っ含ま私のためのチェックを。

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;
        }
}

ただし、これは機能していないようです。


この問題の解決策を見つけましたか?私は同じ船に乗っており、これをどうやってやったのだろうか?
jackweirdy

申し訳ありませんが、問題が別の方法であったとしても、ようやく解決したと思います。
Xeoncross

回答:


8

includeサーバーの起動中にそのことを行います-ランタイム変数$hostは使用できない、またはifコンテキストで使用できないことがわかったように。

serverホストごとにブロックを分割する必要があります。ごめんなさい!


31

まあ、これはかなり古いですが、とにかく、私は回避策を見つけました。

私はこのスタイルで設定された仮想ホストでセットアップを持っています:

/etc/nginx/sites-enabled/site.com.conf

ファイルが存在するかどうかを確認する代わりに(これは不可能です)、私は次のようにします。

include /etc/nginx/sites-customizations/site.com.*.conf

この方法で、sites-customizations-folderにファイルを作成できます。これは、慣例により、メイン構成と同じ名前が付けられています。*かなり多くの余分なコンフィギュレーションファイルが存在しない場合、それは壊れないよう、もし同じように動作します。必要に応じて、複数の追加構成を個別のファイルに追加することもできます。


5

私はこれが古いことを知っていますが、解決策は私がしたように答えを探している人を助けるかもしれません。

特定のホストのみに含める必要があるリダイレクトがたくさんありincludeましたが、ifディレクティブでは許可されていませんが、if含めるファイル内に追加しました...

だから私は include /etc/nginx/conf.d/redirectsそのファイルの中に:

if ($host = "www.example.com") {
    # Some conf or redirects for this site only.
}

5

glob()includeディレクティブでnginxによって使用され、Debianサーバーでうまく機能する関数パターン拡張を利用します。

あなたの場合、この行を置き換えてみてください:

include /path/www/$host/nginx.conf;

これで:

include /path/www/<hostname>/nginx[.]conf;

これは、1つのファイルのみに一致するファイルマスクであり、nginxがファイルが存在しない場合に文句を言うことはありません。ただし、インクルードディレクティブでは変数を使用できないため、で固定値を指定する必要があります<hostname>。個々の.confファイル(vhostごとに1つ)を生成するスクリプトを作成する必要がありました。

編集

ジェラルド・シュナイダーが指摘し、私は維持することが示唆された$host許可されていない、交換、で。上記の提案を変更しました。


1
ここでは変数$hostはまだ機能しません。
ジェラルドシュナイダー

申し訳ありませんが、変数はincludeディレクティブでは許可されていません。リストから各vhostに対して単一の.confを作成するpythonスクリプトを使用しますが、標準からの「カスタム」追加のvhostごとの偏差を広範囲に使用します。
アルベルトパストーレ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.