Linuxの使用経験はありますが、nginxの使用経験はありません。私は、アプリケーションサーバーの負荷分散オプションの調査を任されています。
私はapt-getを使用してnginxをインストールしましたが、すべて問題ないようです。
いくつか質問があります。
Sites-availableフォルダーとconf.dフォルダーの違いは何ですか。これらのフォルダーは両方とも、nginxのデフォルトの構成設定に含まれていました。チュートリアルでは両方を使用します。それらは何のためにあり、ベストプラクティスは何ですか?
サイト対応フォルダーは何に使用されますか?どうやって使うの?
デフォルトの構成はwww-dataユーザーを参照しますか?そのユーザーを作成する必要がありますか? nginxを実行するためにそのユーザーに最適な権限を与えるにはどうすればよいですか?
Sites- *フォルダーはnginx_ensite
およびnginx_dissite
。検索でこれを見つけたApache httpdユーザーの場合、同等のものはa2ensite
/a2dissite
。
sites-available
フォルダーは、現在有効になっているかどうかに関係なく、vhost構成のallを格納するためのものです。
sites-enabled
フォルダには、sites-availableフォルダ内のファイルへのシンボリックリンクが含まれています。これにより、シンボリックリンクを削除することにより、仮想ホストを選択的に無効にすることができます。
conf.d
は機能しますが、何かを無効にする必要がある場合は、フォルダから何かを移動するか、削除するか、変更する必要があります。 sites- *フォルダーの抽象化により、状況が少し整理され、個別のサポートスクリプトでそれらを管理できるようになります。
(あなたが私と、シンボリックリンクを直接管理してスクリプトを知らない多くのdebian管理者の1人でない限り...)
以前の回答に加えて、最も重要なのはディレクトリの呼び出し方法ではありませんが(これは非常に便利な規則です)、実際に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.
したがって、元の質問に答えるには、内部的な違いはなく、他の回答からのアドバイスを思い出しながら、可能な限り最善の方法でそれらを使用することができます。そして、「正しい」答えを選択することを忘れないでください。
通常、sites-enabled
フォルダーは仮想ホスト定義に使用され、conf.d
はグローバルサーバー構成に使用されます。複数のWebサイト(仮想ホストなど)をサポートしている場合は、それぞれが独自のファイルを取得するため、sites-enabled
にファイルを移動したり(または作成して削除したり)、ファイルを簡単に有効または無効にできますsymlinks、これはおそらくより良いアイデアです)。
モジュールの読み込み、ログファイル、および単一の仮想ホストに固有ではないその他のものには、conf.d
を使用します。
デフォルトの構成はwww-dataユーザーを参照しますか?そのユーザーを作成する必要がありますか?
非rootユーザーとしてnginxを実行する必要があります。これはwww-data
という名前の場合もありますが、好きな名前を付けることができます。
Nginxを実行するためにそのユーザーに最適な権限を与えるにはどうすればよいですか?
私はこの質問への答えを確信していません(現時点ではnginxを実行していません)が、Apacheのようなものである場合、その答えはwww-data
ユーザーには静的ファイルへの読み取り権限のみが必要であるということです(そして提供しているディレクトリに対する読み取り+実行)、またはCGIスクリプトなどに対する読み取り/実行権限があり、他の場所には権限がありません。
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.d
はsites-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-available
とsites-enabled
は絶対に避けてください。sites-available
/sites-enabled
を使用する理由はまったくありません。
一部の人々はnginx_ensite
およびnginx_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
を使用します。)
上記のすべてだけでなく、Debian/Ubuntuによって使用される特定のinclude
ディレクティブにも注意してください— /etc/nginx/sites-enabled/*
— sites-enabled
とは異なり、conf.d
にはファイル名サフィックスが指定されていません。
/etc/nginx/sites-enabled
内の1つまたは2つのファイルをすばやく編集し、 emacs
がdefault~
のようなバックアップファイルを作成すると、突然、 default
とdefault~
の両方がアクティブな構成として含まれているため、使用するディレクティブによっては警告が表示されず、長時間のデバッグセッションが発生する場合があります。 (はい、それは私には起こりました。それはハッカソンの間でした、そして、私のconfが機能しなかった理由に完全に困惑しました。)したがって、sites-enabled
は悪であると確信しています。