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


87

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

/var

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

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

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

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

従来、Ubuntu LinuxにApacheまたはNginxをストックインストールすると、ディレクトリがに配置され/var/www/ます。

私には、ファイルやその他の永続的なコンテンツを含むディレクトリを置く理想的な場所が好きではないようです。

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

より主観的に、ディレクトリ構造に従って、これは理想的にはどこに行くべきですか?


2
これは私自身も頻繁に尋ねて、どうにかしてそれを整理した良い質問です:)。
オオカミ

1
FHSによれば、/var/lib/wwwもっと適切だったでしょう
Nils

3
現在のFHSは、Webサーバーのルートは以下の/srv
-LogicDaemon

1
/varこれは、編集または変更が可能な実行不可能な非構成の実ユーザーが所有していないデータ用です(たとえば、書き換え可能なボリューム上に存在する必要があります)。 /var/lib再起動後も存続し、メンテナンスプロセスによって削除されないデータのタイプ専用です。たとえば、DHCPリースの記録を保存isc-dhcp-serverする/var/libために使用します。したがって、Webサーバーファイルの論理的な場所になります。
ローレンス

@Nils、なぜlib?
パセリエ

回答:


35

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

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

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

IIRCは、/var/wwwRed Hat Linux 7.x(Red Hat Enterprise Linuxではありません)の2000-2001リリースで私の人生に入りました。あなたが上記で引用したすべての理由から、私はそれがあまり意味をなさないと思った-しかし、現実には、現代では非常に多くの他のツールと技術が関与しているとにかく場所が移動する。

#   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

33

の使用法は/var/www一見しただけで混乱します。

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

ただし、その構造を決定すること/srvはローカル管理者の唯一の責任であるとも述べています。したがって、パッケージはに何も入れてはならず/srvデフォルトのドキュメントルートはにしないでください/srv。(apache)パッケージはその中/srvと下にあるものを認識しないためです。クリアテキストのパスワードなどを含むSubversionリポジトリかもしれません。そのため、の外側にデフォルトが必要です/srv。そのデフォルトはになり/var/wwwます。

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

概要:/srvApache仮想ホストを適宜使用および構成する必要があります。


5
この答えは本当に貴重です。「うまくいけば、人々は新しいディレクトリを発明する必要があるので、それを使用し始めません...など。」多くの管理者が時間をかけていくつかの基本事項を確認する必要があることを示しています。(私は今やっているように;))
Toastgeraet

これは、Ubuntuバージョンですでに発生しています。apacheドキュメントルートのデフォルトは/ var / www / htmlです。変更の理由はより安全であるということをどこかで読みました。私は知らないので、それに反対することはできません。私は実際にそのパスを使用しないことを伝えることができます。しばらく使用していたセットアップを続行します。/ websitesに仮想ホスト専用のディスクをマウントします。cpanelホスティングと同様の構造を維持し、/ websites / vhostname / public_htmlから提供します。このようにして、vhostを使用して、メールまたは特定のvhostのすべてを保持できます。
クリス

実際、ディスクをパーティション分割し、パーティションを個々の仮想ホストバックアップ用の仮想ホストディレクトリにマウントすることを検討しています。各vhostで/ websites / vhost / backupが得られます(いくつか実行し、後日実行する可能性があります)
Chris

24

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

また、FHSからの定義はもう少し正確だと思います(データは「常に変化する」必要はありません)。

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


ただし、FHSは、wwwデータを入力する必要があることも示しています。/srv

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

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

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


7
Errr、の全体のポイントは、/usr/localそのがあるということではないパッケージマネージャによって管理されます。
デロバート

@derobert / usr / localは、サードパーティのパッケージ(ディストリビューションのリポジトリで提供されていないパッケージ)で多く使用されます。また、独自のパッケージを作成する会社がそれらをそこに置くことも一般的です(ただし、それはまだディストリビューションによって提供されていないパッケージに該当します)。これも同様にFHSによってサポートされている、の一番下に#27を注意して見pathname.com/fhs/pub/fhs-2.3.html
パトリック

3
/srv/wwwSuSEシステムの古典的なパスでもありました(SLES10まで)。
ニルス

1
@nilsは待って、彼らはFHSに準拠していて、意図的にそれを残したのですか?ため息
パトリック

1
@Patrickだから-これに気付いたとき、私はかなり驚いた。おそらく、彼らは他のLinuxの亜種のようになりたかったのでしょう
ニルス

13

他の人が言ったように、理由はほとんど歴史的です。/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


6

私の経験から(私はWeb開発者です)、Webサイトのコンテンツは安定しているとはほど遠いです。htmlファイル(動的に生成されるコンテンツを意識しない)の場合でも、それらは絶え間ない変更(修正、省略など)の対象となります。

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


6
私は同意しません。私はまだHTMLファイルを「常に変化している」とは見ていません。それらに加えられた変更は意図的であり、理想的には変更追跡のためにリビジョン管理にチェックインされるでしょう。
ジョナラード

2
Mysqlデータベースへの変更も意図的ですが、データベースファイルは/ var / dbにあります。気にしませんか?
12

5
確かにそうですが、変数から定数への連続体では、データベースはWebページのバージョンがデータベースよりも少ないため、DBはHTML / whatever / webアプリケーションよりも変数が多いと主張します。比較的少数の異なるバージョンを持つページには、私は入れません/var。しかし、それは難しい事実ではなく、意見と議論の問題だと思います。
ジョナラード

1
2年間変更されていないデータベースを見せたらどうしますか?
12

2
ここで指定された引数により、ホームディレクトリは/ varに属します。また、/ usrも同様です。これは、セキュリティパッチなどのために絶えず更新されるためです。/varは、「頻繁に」変更されるファイル用であり、小さなファイルの大量書き込みに最適化されたファイルシステムをマウントできます。データベースが/ varに属していないと主張しても、ウェブサイトがそうであるという主張を強化するわけではありません。Webサイトは読みやすく、/ varを使用してもメリットはありません。また、ロギングやメールなどの重要なシステムプロセスが実際に遅くなる場合があります。
ダンカン

6

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

この理由の1つは、他の人が述べたように、そのファイルシステム(logs / et al)に大量の読み取り/書き込みがあることです。別のディスク/スライスを持つことは(ほとんどの読みに対して、それがより良いI / Oのこのタイプのために調整できることを意味//usrなど...)。

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

ファイルシステムとディスクテクノロジーは時間の経過とともに大幅に改善されたため、これはほとんど発生しません。


1
/ varは、ログが乱暴になったときにマシンを停止したくない場合に、/ varが別のパーティションとしてまだ良いプラクティスです
ダンカン

3

/var FTPまたはその他のアップロードを許可する複数の仮想ホストが実行されているWebサイトがある場合、つまり、Webホストなどの場合、マルチユーザーアクセスのユーザー中立的な「ベース」ロケーションの適切な選択です。

/home杜漏または悪意のあるユーザーがアップロードあれば悪いことをするために、他のユーザーのシェルアカウントに起こる可能性があるため、おそらく最適ではない/home(の伝統的なセットアップを想定したパーティションの制限/var/home別々のパーティション上にある、など)それは他のユーザーアカウントに影響を与えることができます。

もちろん/srv、これには良いと思いますが/var、UNIXの伝統では長い間使われてきました。


配布および配布パッケージはFHSに準拠する必要があります。エンドの「ユーザー」(サーバーの場合はシステム管理者)は、必要に応じてWebサイトをどこにでも配置できます。/ srvが存在する前から、/ home / pubまたは/ home / webにWebサイトを配置しています。しかし、今日Webサーバーソフトウェアプロジェクトを配布する場合、/ srv / wwwまたはFHSが言うものがデフォルトになりますが、管理者はそれを変更できます。
スカペレン

@ultrasawblade、なぜ/home/httpですか?
Pacerier

1

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

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


1

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

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

#<Directory /srv/>
#   Options Indexes FollowSymLinks
#   AllowOverride None
#   Require all granted
#</Directory>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.