web-dev-qa-db-ja.com

nginxのサイト利用可能とconf.dディレクトリの異なる使用方法は何ですか?

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

私はapt-getを使用してnginxをインストールしましたが、すべて問題ないようです。

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

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

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

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

112
Seth Spearman

Sites- *フォルダーはnginx_ensiteおよびnginx_dissite。検索でこれを見つけたApache httpdユーザーの場合、同等のものはa2ensite/a2dissite

sites-availableフォルダーは、現在有効になっているかどうかに関係なく、vhost構成のallを格納するためのものです。

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

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

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

103
Andrew B

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

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

ここで使用される唯一のディレクティブは include であるため、たとえば、 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.

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

42

通常、sites-enabledフォルダーは仮想ホスト定義に使用され、conf.dはグローバルサーバー構成に使用されます。複数のWebサイト(仮想ホストなど)をサポートしている場合は、それぞれが独自のファイルを取得するため、sites-enabledにファイルを移動したり(または作成して削除したり)、ファイルを簡単に有効または無効にできますsymlinks、これはおそらくより良いアイデアです)。

モジュールの読み込み、ログファイル、および単一の仮想ホストに固有ではないその他のものには、conf.dを使用します。

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

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

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

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

32
larsks

どうしたの?

evilsites-available/sites-enabledロジックは nginxの上流パッケージング によって使用されないため、DebianまたはUbuntuを使用している必要があります http://nginx.org/packages/

どちらの場合でも、どちらも/etc/nginx/nginx.confの標準の include ディレクティブを使用して、構成規則として実装されます。

Nginx.orgのnginxの公式アップストリームパッケージからの/etc/nginx/nginx.confのスニペットを次に示します。

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

これが /etc/nginx/nginx.conf from Debian/Ubunt のスニペットです:

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

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


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

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

サイトを無効にする必要がある場合は、ファイル名の名前を.confのサフィックスが付いていない名前に変更するだけで、非常に簡単でわかりやすく、エラーを防ぐことができます。

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

または enable サイトの反対:

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


sites-availablesites-enabledは絶対に避けてください。

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

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

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

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

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

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

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

  • 無効になっているサイトはどれですか? (conf.dでは、.conffind /etc/nginx/conf.d -not -name "*.conf"で終わらないファイルを逆検索するか、または grep -v を使用します。)

上記のすべてだけでなく、Debian/Ubuntuによって使用される特定のincludeディレクティブにも注意してください— /etc/nginx/sites-enabled/*sites-enabledとは異なり、conf.dにはファイル名サフィックスが指定されていません。

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

したがって、sites-enabledは悪であると確信しています。

19
cnst