Nginxのconf.dディレクトリとvs.sites-availableの異なる使用法は何ですか


99

Linuxを使用した経験はありますが、nginxを使用した経験はありません。私は、アプリケーションサーバーの負荷分散オプションの研究を任されています。

私はapt-getを使用してnginxをインストールしましたが、すべてうまくいきました。

いくつか質問があります。

サイトで使用可能なフォルダーとconf.dフォルダーの違いは何ですか。これらのフォルダーは両方とも、nginxのデフォルト構成セットアップに含まれていました。チュートリアルでは両方を使用します。それらは何のためにあり、ベストプラクティスは何ですか?

サイト対応フォルダーは何に使用されますか?どうやって使うの?

デフォルト設定はwww-dataユーザーを参照しますか?そのユーザーを作成する必要がありますか?そのユーザーにnginxを実行するための最適な許可を与えるにはどうすればよいですか?


質問するときは、範囲のクリープを避けるようにしてください。www-data別のトピックです。ほとんどのオペレーティングシステムは、ルートとしてポート80にバインドした後にプロセスが実行できる、より低い権限を持つ別のユーザーを定義します。設定ファイルで定義されています。そこから基本的なセキュリティ慣行を適用します。ウェブサーバーが書き込む必要のないものにユーザーが書き込むことを許可しないでください。意図しない限り、他のユーザーがファイルに書き込むことを許可しないでください。
アンドリューB

回答:


94

sites- *フォルダはによって管理されているnginx_ensitenginx_dissite。これを検索で見つけるApache httpdユーザーの場合、同等の値はa2ensite/ a2dissiteです。

このsites-availableフォルダーは、現在有効になっているかどうかにかかわらず、すべてのvhost設定を保存するためのものです。

このsites-enabledフォルダーには、サイトで使用可能なフォルダー内のファイルへのシンボリックリンクが含まれています。これにより、シンボリックリンクを削除して仮想ホストを選択的に無効にできます。

conf.d仕事をしますが、何かを無効にする必要がある場合は、フォルダから何かを移動、削除、または変更する必要があります。sites- *フォルダーの抽象化により、物事が少し整理され、個別のサポートスクリプトで管理できます。

(あなたが私のようではなく、スクリプトについて知らずにシンボリックリンクを直接管理したばかりの多くのdebian管理者の1人でない限り...)


12
何かおかしくなりましたか?downvoteを理解していません。
アンドリューB

1
これはnginxに組み込まれていますか?github.com/perusio/nginx_ensiteを
lfender6445

18
これsites-available|sites-enabledはDebian主義であり、nginxやApacheが行うことではないことに注意することが重要です。これはおそらく以前は非常に便利でしたが、構成管理とコンテナの時代にはその有用性はいくぶん制限されています。
マイケルハンプトン

構成管理とコンテナーがサイト利用可能|サイト対応のユーティリティをどのように制限するかコメントできますか?
karthik vee

1
@karthikveeのポイントは、今日のサーバーはしばしば単一のWebサイト/サービスのみを提供するエフェメリックコンテナとして表示されるためnginx.conf、読みやすさを損なうことなくこれを含めることができるということです。これは、サーバーが通常数十のWebサイトを保存する数年前のアプローチとは逆です。
アダムツィ

38

これまでの回答に加えて、最も重要なのはディレクトリの呼び出し方法ではなく(非常に便利な規則ですが)、実際に何を入れるかですnginx.conf。設定例:

http {
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*.conf;
    include /etc/nginx/sites-enabled/my_own_conf;
...
}

ここで使用される唯一のディレクティブはincludeであるため、eg conf.d/との間に内部的な違いはありませんsites-enabled/

上記のドキュメントから:

Syntax:     include file | mask;
Default:    —
Context:    any

Includes another file, or files matching the specified mask, 
into configuration. Included files should consist of 
syntactically correct directives and blocks.

したがって、元の質問に答えるには、内部的な違いはありません。他の回答からのアドバイスを覚えて、できる限り最善の方法で使用できます。そして、「正しい」答えを選ぶことを忘れないでください。


1
右、sites-enabledやや迷惑な中間がするように周りのファジング、いくつかのditributionによって発明されました。公式ソースからnginx を入手してください。最新の製品を入手するだけでなく、この構成の不要部分を取り除くことができます。
バーナードロセット

2
これは、公式のNginxのドキュメントにこの命名規則の参照が1つも存在しない理由を説明しています。それはサードパーティのプロジェクトです!github.com/perusio/nginx_ensite
AxeEffect

30

通常、sites-enabledフォルダーは仮想ホストの定義にconf.d使用され、グローバルサーバーの構成に使用されます。複数のWebサイト(つまり、仮想ホスト)をサポートしている場合、それぞれが独自のファイルを取得するので、ファイルを出し入れするsites-enabled(またはシンボリックリンクを作成および削除する)ことで、簡単に有効化および無効化できます。より良いアイデア)。

使用するconf.dモジュールのロード、ログファイル、および単一の仮想ホストに固有ではない他のもののようなもののために。

デフォルト設定はwww-dataユーザーを参照しますか?そのユーザーを作成する必要がありますか?

非rootユーザーとしてnginxを実行する必要があります。これは場合によっては名前www-dataが付けられますが、好きな名前を付けることができます。

そのユーザーにnginxを実行するための最適な許可を与えるにはどうすればよいですか?

私はこの質問に対する答えが確かではありません(現時点ではnginxを実行していません)が、Apacheのようなものであれば、www-dataユーザーは静的ファイルへの読み取り権限のみが必要です(およびディレクトリで読み取り+実行)提供していること、またはCGIスクリプトなどのアクセス許可を読み取り/実行し、それ以外のアクセス許可はありません。


1
有効なシェルレコードを削除することにより、このユーザーのログイン機能を無効にするため、Webサーバーを実行するための専用ユーザーを持つことも重要です。
デュークライオン

>「root以外のユーザーとしてnginxを実行する必要があります」-これについて詳しく説明してください。
lfender6445 16

1
特権のないユーザーとして実行することは、リモートからの侵害によって生じる可能性のある損害を抑える方法です。Webサーバーを実行しているときrootに何らかのリモート侵害が発生した場合、攻撃者はすぐにシステムに完全にアクセスできます。特権のないユーザーとして実行している場合、管理アクセスは何らかのローカルエクスプロイトとの組み合わせでのみ利用できます。
ラースク

14

どうしたの?

以来、あなたは、DebianやUbuntuのを使用している必要があり sites-available / sites-enabledロジックはで使用されていないのnginxの上流のパッケージからhttp://nginx.org/packages/

いずれの場合も、両方の標準includeディレクティブを使用して、構成規則として実装されます/etc/nginx/nginx.conf

ここでの抜粋です/etc/nginx/nginx.confnginx.orgからのnginxの公式上流のパッケージからは:

http {
    …
    include /etc/nginx/conf.d/*.conf;
}

/etc/nginx/nginx.confDebian / Ubuntuの抜粋は次のとおりです。

http {
    …
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

そのため、NGINXの観点から見ると、唯一の違いは、ファイルがよりconf.d早く処理されることです。したがって、互いに静かに競合する構成がある場合、の構成がの構成conf.dより優先されsites-enabledます。


ベストプラクティスはですconf.d

を使用する必要があり/etc/nginx/conf.dます。これは標準の規則であり、どこでも動作するはずです。

サイトを無効にする必要がある場合は、ファイル名を.confサフィックスがなくなるように名前を変更するだけで、非常に簡単でわかりやすく、エラーが発生しません。

sudo mv -i /etc/nginx/conf.d/default.conf{,.off}

または、サイトを有効にするための反対:

sudo mv -i /etc/nginx/conf.d/example.com.conf{.disabled,}


避けてくださいsites-availablesites-enabledすべてのコストで。

sites-available/ を使用する理由はまったくありませんsites-enabled

  • 一部の人々はスクリプトに言及nginx_ensitenginx_dissiteました-これらのスクリプトの名前はこの大惨事の残りの部分よりもさらに悪いです-しかしこれらのスクリプトはどこにも見つかりませんnginx-Debian(そしておそらくUbuntuでも)にもパッケージにはありません、独自のパッケージに含まれていない、さらに、2つのディレクトリ間でファイルを移動および/またはリンクするために、非標準のサードパーティスクリプト全体が本当に必要ですか?

  • スクリプトを使用していない場合(実際、上記のように賢い選択です)、サイトをどのように管理するかという問題が発生します。

    • からsites-availableへのシンボリックリンクを作成しますsites-enabledか?
    • ファイルをコピーしますか?
    • ファイルを移動しますか?
    • の場所でファイルを編集しますsites-enabledか?

上記は、数人または数人がシステムの管理を開始するまで、またはあなたが迅速な決定を下すまで、数ヶ月または数年後にそれを忘れるまで、取り組むべきいくつかの小さな問題のように見えるかもしれません...

これにより、次のことが可能になります。

  • からファイルを削除しても安全sites-enabledですか?ソフトリンクですか?ハードリンク?または、構成の唯一のコピー?構成地獄の典型的な例。

  • どのサイトが無効になっていますか?(有conf.dだけで終わらないファイルのための反転検索を行う、.conf- find /etc/nginx/conf.d -not -name "*.conf"、または使用しますgrep -v。)

だけでなく、上記のすべてが、また、具体的な注意includeのDebian / Ubuntuので使用されるディレクティブを- /etc/nginx/sites-enabled/*-何のファイル名の拡張子が指定されていないsites-enabledためとは異なり、conf.d

  • これが意味する1日すばやくファイルまたは2内を編集することにした場合ということです/etc/nginx/sites-enabled、そしてあなたはemacs、バックアップファイルなどを作成しdefault~、その後、突然、あなたは両方を持っているdefaultし、default~使用ディレクティブを依存し、さえ得られない可能性がある、アクティブな構成として含ま警告が表示され、長時間のデバッグセッションが発生します。(はい、それは私に起こりました;それはハッカソンの間でした、そして私は私のconfがうまくいかなかった理由に完全に戸惑いました。)

したがって、私はそれsites-enabledが純粋な悪であると確信しています!


上記のすべてに加えて、明らかに、誤ったシンボリックリンクを作成することも非常に一般的です!stackoverflow.com/a/14107803/1122270 念のために、あなたはsites-enabled十分に悪いとは思わなかった!
cnst

または、誰かがでファイルを編集することを決定することがありますがsites-enabled、別の人がそれを削除して無効にすることを決定し、おそらくシンボリックリンクであると考えて、confファイルを回復するためにnginxヒープの後続のメモリダンプが必要になる場合があります:stackoverflow.com/q/45852224/1122270
cnst

とについての主張に反対しなければsites-availableなりsites-enabledません。nginxがリロードまたは再起動された場合に部分的な構成ファイルをピックアップしないように、「ライブ」ピックアップディレクトリの外に構成ファイルを準備できることが重要です。また、アクティブに使用されなくなった設定ファイルを保持しておくと便利です。そもそもIMOでnginxを管理するのに十分な経験がある場合、シンボリックリンクの作成は特に難しいタスクではありません。
BE77Y

@ BE77Yより複雑なアプローチを取っています。プログラミングでは、無効にするかコメントアウトするだけでなく、未使用のコードを完全に削除することをお勧めします。DevOpsが異なる必要がある理由はわかりません。設定が不要になった場合は削除します(VCSに存在する必要があります)。部分的なconfファイルについても同様です—なぜそれらを有効にして編集し、nginxを背中の後ろでリロードするのですか?(USR1、ログを再度開きますが、confをリロードしません。)シンボリックリンクの「経験」コメントの方向が間違っていることがわかります。問題は一貫性の問題であり、経験とはほとんど関係ありません。
cnst

2
a)これがこの議論に適切な媒体ではなく、おそらくさらに重要なことは、b)いずれにせよ無益である可能性が高いことは明らかです。同意しないことに同意しましょう。
BE77Y
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.