web-dev-qa-db-ja.com

Webサーバーのルートディレクトリがデフォルトで「/ var / www」に配置されるのはなぜですか?

Tuxfiles は、Linuxディレクトリ構造について次のように述べています。

/var

このディレクトリには、システムの実行中に常に変化する変数データが​​含まれています。

FHS on /var は次のように述べています。

/varには、可変データファイルが含まれています。これには、スプールディレクトリとファイル、管理データとログデータ、一時ファイルと一時ファイルが含まれます。

次に、ログ、メール、スプーラなどがそのフォルダに置かれると言います。

伝統的に Ubuntu LinuxにApacheまたはNginxのストックインストールを行うと、ディレクトリが/var/www/に配置されます。

ほとんど永続的であるはずのファイルやその他のコンテンツを含むディレクトリを配置するのに理想的な場所は好きではないようです。

なぜそれが頻繁に/varに入れられるのですか?

もっと主観的には、ディレクトリ構造によると、これは理想的な場所ですか?

90
jonallard

/var/wwwの使用は、一見しただけでは混乱を招きます。

FHSによると、Webサーバーのデータは/srvに送信する必要があります。それが主なルールです。

ただし、/srvの構造を決定するのはローカル管理者の責任です。したがって、パッケージは/srvに何も入れてはならず、()ドキュメントルートは/srvであってはなりません。これは、(Apache)パッケージが/srv以下の内容を認識していないためです。たぶん、クリアテキストのパスワードやその他のものを備えたSubversionリポジトリ。したがって、/srvの外側にデフォルトがある必要があります。そのデフォルトは/var/wwwになります。

/var/wwwは主にプレースホルダーです。パッケージは、静的なHTMLコンテンツには/usr/shareを使用し、動的な変数コンテンツには/var/libを使用します。多くの人は、HTMLを/var/wwwに入れるべきだと誤って考えました。パッケージも時々それを使用するので、それは問題です。そこで最近、パッケージ用の/var/www/htmlを発明しました。うまくいけば、人々はそれを使い始めないでしょう。それでも、彼らは新しいディレクトリを発明しなければならないのです...など。

概要:/srvを使用し、それに応じてApache仮想ホストを構成する必要があります。

39

実際には「伝統的な」場所ではありません。従来、OSのインストール後にインストールしたものはすべて/usr/local、そして実際、それは今日までの「クラシックApacheパスレイアウト」(彼らの言葉)です。長い間、それは/home/httpd

表示されているのは、特定のOS用に構成されたApache(Red Hat Linux、Mac OS X、GNUなど)が場所をカスタマイズすることです。 Apacheのソースはこのためにうまく設計されています。実際、ソースファイルでServerRootの値をトレースすると、このファイルで始まることがわかります config.layout

そのファイルからの一部の抜粋は、docrootの場所にさまざまな種類があることを示しています。

ちゃんと覚えたら、 /var/www 2000年から2001年にリリースされたRed Hat Linux 7.x(Red Hat Enterprise Linuxではありません)のリリースで私の人生に入りました。あなたが上で引用したすべての理由から、私はそれはあまり意味がないと思いました-しかし、現実には、現代では他の多くのツールやテクノロジーが場所の移動に関係しています。

#   Classical Apache path layout.
<Layout Apache>
    prefix:        /usr/local/Apache2
    datadir:       ${prefix}

#   GNU standards conforming path layout.
#   See FSF's GNU project `make-stds' document for details.
<Layout GNU>
    exec_prefix:   ${prefix}
    datadir:       ${prefix}/share+

#   Mac OS X Server (Rhapsody)
<Layout Mac OS X Server>
    prefix:        /Local/Library/WebServer
    datadir:       ${prefix}

#   Darwin/Mac OS Layout
<Layout Darwin>
    prefix:        /usr
    datadir:       /Library/WebServer

#   Red Hat Linux 7.x layout
<Layout RedHat>
    prefix:        /usr
    datadir:       /var/www

#   SuSE 6.x layout
<Layout SuSE>
    prefix:        /usr
    datadir:       /usr/local/httpd

#   BSD/OS layout
<Layout BSDI>
    prefix:        /var/www
    datadir:       ${prefix}

#   Solaris 8 Layout
<Layout Solaris>
    prefix:        /usr/Apache
    datadir:       /var/Apache
37
ckhan

Akondの回答には同意しますが、もっと重要な側面があると思います。他のほとんどの場所(/usr/localなど)は通常、システム(パッケージマネージャー)によって管理されます。 /varは通常、パッケージマネージャー(システム全体の「データ」)によって管理されていないファイルが置かれる場所です。

[〜#〜] fhs [〜#〜] の定義も少し正確だと思います(データが「常に変化している」必要はありません)。

/ varには可変データファイルが含まれます。これには、スプールディレクトリとファイル、管理データとログデータ、一時ファイルと一時ファイルが含まれます。


ただし、 [〜#〜] fhs [〜#〜] は、wwwデータが/srvに入れられるべき種でもある

/ srvには、このシステムによって提供されるサイト固有のデータが含まれています。

これを指定するこの主な目的は、ユーザーが特定のサービスのデータファイルの場所を見つけられるようにし、読み取り専用データ、書き込み可能なデータ、およびスクリプト(cgiスクリプトなど)に単一のツリーを必要とするサービスを合理的に配置できるようにするためです。

/ srvのサブディレクトリに名前を付けるために使用される方法論は、現時点ではこれがどのように行われるべきかについてコンセンサスがないため、指定されていません。/srvの下でデータを構造化する1つの方法は、プロトコルによるものです。 ftp、rsync、www、およびcvs。

25
Patrick

他の人が言ったように、理由は主に歴史的なものです。 /varは、キャッシュファイル、ログ、ランタイムデータ(ロックファイルなど)、メールサーバーストレージ、プリンタースプーリングなど、常に変化するシステムデータに使用されています。基本的に、入力できないものすべてに使用されます。 /usr(ローカルデータが含まれているため)は、/optに含まれるサードパーティのプログラムではなく、/tmpに含まれるため、破棄および揮発性ではありません。

Unix/Linuxが開発されるにつれ、さまざまな異なるディレクトリがまとめられたホッジポッジが作成され、厄介な場所になりました。近年、いくつかのもの、特にマシンによって提供されるコンテンツ([ Filesystem Hierarchy Standard 2.3、p.15 ]は、/srvではなく、/var/wwwに入力する必要があります。

同様のことが/var/runにも数年前に起こりました-いくつかのディストリビューションの集中的な取り組みにより、それは/var/runから/runに移動され、以前に使用されていた/var/lock/var/run/dev/shmの関数を融合しました。

13
mindcorrosive

私の経験(私はWeb開発者です)から、Webサイトのコンテンツは安定していません。 htmlファイルの場合でも(動的に生成されたコンテンツを無視する)、それらは常に変更(修正、省略など)される可能性があります。

だから私の見方では、それらは変数です。したがって、これらは/ varディレクトリに完全に適合しており、何も問題はありません。

6
akond

IIRCは、昔は独自のファイルシステム(個別のディスクまたはディスクのスライス)であるため、常に/varをマウントしていました。

これの理由の1つは、他の人が述べたように、そのファイルシステム(logs/et al)への大量の読み取り/書き込みがあることです。別のディスク/スライスがあることは、このタイプのI/Oに合わせてより適切に調整できることを意味します(主に//usrなどを読み取るよりも)。

もう1つの理由は、当時、書き込み操作中にシステムがクラッシュした場合、ルートファイルシステムが破損し、修復が困難な状態になる可能性が非常に高かったためです。したがって、/から分離する必要があります。

ファイルシステムとディスクのテクノロジーは時間とともに大幅に改善されたため、これは発生する可能性がはるかに低くなっています。

6
Brian

/varは、FTPやその他のアップロードを許可する複数の仮想ホストを実行しているWebサイトがある場合(つまり、Webホストなど)、ユーザーに中立な「ベース」の場所として適切な選択です。

意図しないまたは悪意のあるユーザーが/homeパーティションの制限にアップロードすると(/home/varなどの従来のセットアップが別のパーティションにあると想定)、他のユーザーアカウントに悪影響を及ぼす可能性があるため、/homeは最適ではない可能性があります。

もちろん、これには/srvの方が適していると思いますが、UNIXの伝統では/varはずっと以前からあります。

3
LawrenceC

ここで追加したいのは、/ usrにWebの「ルート」を置くと、FHSの/ usrが共有可能で読み取り専用であることを示す部分が競合するということです。は、異なる構成を含む異なるファイルを持つことができますが、これは/ usrにとって理想的ではありません。

さらに、一部のWebアプリケーション(MediaWikiとPhpBBは、頭上にあるものに名前を付けます)では、添付ファイル/メディアファイルのアップロード用に、Webディレクトリツリーの下に書き込み可能な場所が必要です。したがって、読み取り専用の/ usr定義にしたい場合は、/ usrの下にWebツリーを配置すると競合が発生します。

1
Didi Kohen

Apache Webサーバーには/ var/www /の下にデフォルトのWebサイトがありますが、他のWebサイトを/ srv /の下に置くことをお勧めします

Ubuntu Server 14.04 LTSでこれに気付きました。デフォルトのApache2.confファイルには、コメントブロックが含まれています。

#<Directory /srv/>
#   Options Indexes FollowSymLinks
#   AllowOverride None
#   Require all granted
#</Directory>
1
Maris B.