Nginxには構成ファイルが含まれていませんか?


12

Nginxに含まれる構成ファイルの順序は固定ですか、それともランダムですか?Apache は、ワイルドカード文字がアルファベット順に展開されることを明示的に述べています。Nginxではこれは当てはまらないようで、マニュアルにはそれについて何も書かれていません

私のセットアップで20_example.comは、以前に含まれて00_defaultいましたが、共有ディレクティブ(ログ形式など)を定義するという私の目的を無効にします。

回答:


23

nginxのソースコードによると、GLOB_NOSORTパラメーターを指定したglob()関数を使用しているため、ファイルを含める順序を明確に確立できませんでした。

これは2012年11月変更され、1.3.10で最初にリリースされました。変更ファイルから:

Unixシステムでマスク付きの「include」ディレクティブが使用される場合、インクルードファイルはアルファベット順にソートされます。


3

AD7sixの答えは完全に正しいものではありません。順序は、2つのサーバーブロックが同じ「特異性」を持つ場合、たとえば両方がserver_nameで正規表現を使用し、着信要求が両方に一致する場合にも重要です。

server {
    server_name ~^(www\.)?(?<domain>foo\.com|bar\.com|baz\.com)$;
    ...
}

そして

server {
    server_name ~^(www\.)?(?<domain>.+)$;
    ...
}

このシナリオでは、2つのサーバーブロックを2つのファイルに分散させることはできません。順序が保証されないためです。


1

OPはlog_formatの順序を指摘しているので、カスタムlog_formatsの場合、両方のタイプのファイル、log_formatsを含むファイル、log_formatsを使用するサーバーブロックを含むファイルを同じdirに配置すると、結果は非常に再現性のない構成。

手作りのnginxファームを最初に人形に移動した職場では、2つの/ etc / nginx / *を持っているなどの多くの奇妙な状況をデバッグした後、同一のハードウェア/セットアップでいくつかのnginxインストールが最初から失敗することがわかりましたr)md5matchと同じバイナリで異なる結果(1つで無効なlog_formatエラーが発生し、他の作業が行われる)を使用して、log_formatなどの一部のディレクティブで実際に順序が非常に重要になる難しい方法を学びました。

サーバーブロックをconf.d / *からconf.d / *の後に含まれる別のフォルダーに移動するだけで問題を修正しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.