Warum befindet sich das Stammverzeichnis eines Webservers standardmäßig in „/ var / www“?

87

Tuxfiles sagt Folgendes über die Linux-Verzeichnisstruktur:

/var:

Dieses Verzeichnis enthält variable Daten, die sich bei laufendem System ständig ändern.

FHS on/var sagt Folgendes:

/varenthält variable Datendateien. Dies umfasst Spool-Verzeichnisse und -Dateien, Verwaltungs- und Protokollierungsdaten sowie vorübergehende und temporäre Dateien.

Dann sagen sie, dass Dinge wie Protokolle, E-Mails und der Spooler in diesem Ordner abgelegt werden.

Traditionell findet eine Stamm Installation von Apache oder Nginx auf Ubuntu Linux das Verzeichnis an /var/www/.

Es scheint mir nicht der ideale Ort zu sein, um ein Verzeichnis mit Dateien oder anderen Inhalten zu erstellen, die beinahe permanent sein sollen.

Warum wird es so oft hineingesteckt /var?

Ist dies subjektiv gesehen der Ort, an dem es nach der Verzeichnisstruktur im Idealfall gehen sollte?

Jonallard
quelle
2
Das ist eine gute Frage, die ich mir auch oft gestellt und irgendwie damit arrangiert habe :).
Wolf
1
Laut FHS /var/lib/wwwwäre besser geeignet gewesen ...
Nils
3
/srv
Laut
1
/varist für nicht ausführbare Nichtkonfigurationsdaten gedacht, die sich nicht im Besitz eines Benutzers befinden und die bearbeitet oder geändert werden können (z. B. auf einem wiederbeschreibbaren Volume gespeichert werden sollen). /var/libWird speziell für diese Art von Daten, die einen Neustart überstehen und nicht durch einen Wartungsprozess gelöscht werden sollen, isc-dhcp-serververwendet /var/lib, um beispielsweise ihren Eintrag von DHCP-Leases zu speichern. Es wäre also ein logischer Ort für Webserver-Dateien.
LawrenceC
@Nils, warum lib?
Pacerier

Antworten:

35

Es ist eigentlich gar nicht der "traditionelle" Ort. Traditionell ist alles, was Sie nach dem Betriebssystem installiert haben /usr/local, das "klassische Apache-Pfadlayout" (ihre Worte) bis heute. Lange Zeit war es das /home/httpd.

Was Sie sehen, ist, dass ein Apache, der für ein bestimmtes Betriebssystem konfiguriert wurde - egal, ob es sich um Red Hat Linux, Mac OS X, GNU usw. handelt - den Speicherort anpasst. Apaches Quelle ist dafür gut geeignet. Wenn Sie den Wert für ServerRoot in den Quelldateien verfolgen, werden Sie feststellen, dass er in dieser Datei beginnt config.layout:

Einige Auszüge aus dieser Datei werden Ihnen zeigen, dass der Speicherort der Doku sehr abwechslungsreich ist.

IIRC ist /var/wwwmit den Releases 2000-2001 von Red Hat Linux 7.x (nicht Red Hat Enterprise Linux) in mein Leben getreten . Aus all den Gründen, die Sie oben zitiert haben, fand ich es nicht sehr sinnvoll - aber die Realität ist, dass in der Neuzeit so viele andere Tools und Technologien involviert sind, dass sich der Standort trotzdem bewegt.

#   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
ckhan
quelle
33

Die Verwendung von /var/wwwist nur auf den ersten Blick verwirrend.

Laut FHS sollten Webserver-Daten an gehen /srv. Das ist die Hauptregel.

Es heißt jedoch auch, dass die Entscheidung über die Struktur von /srvin der alleinigen Verantwortung des lokalen Administrators liegt! Daher dürfen Pakete nichts einfügen /srv, und der Standard- Dokumentenstamm darf es nicht sein /srv, da das (Apache-) Paket nicht weiß, was sich darin /srvund darunter befindet. Vielleicht ein Subversion-Repository mit Klartext-Passwort und anderen Dingen. Es muss also einen Standard außerhalb von geben /srv. Das ist Standard geworden /var/www.

/var/wwwist meist ein Platzhalter. Pakete werden /usr/sharefür statischen HTML-Inhalt oder /var/libfür dynamischen variablen Inhalt verwendet. Viele Leute dachten fälschlicherweise, dass sie HTML in dieses Format einfügen sollten /var/www. Das ist ein Problem, weil Pakete das gelegentlich auch verwenden. So erfanden sie vor kurzem /var/www/htmlfür Pakete. Hoffentlich werden die Leute nicht damit anfangen, weil sie dann wieder ein neues Verzeichnis erfinden müssen ... und so weiter.

Zusammenfassung: Sie sollten /srvIhre virtuellen Apache-Hosts entsprechend verwenden und konfigurieren.

Hontvári Levente
quelle
5
Diese Antwort ist wirklich wertvoll. "Hoffentlich werden die Leute nicht damit anfangen, weil sie dann wieder ein neues Verzeichnis erfinden müssen ... und so weiter." Zeigt, dass sich viele Administratoren die Zeit nehmen sollten, um sich über einige Grundlagen zu informieren. (wie ich es gerade tue;))
Toastgeraet
Dies ist bereits in Ubuntu-Versionen geschehen. Apache Document Root ist standardmäßig / var / www / html. Ich habe irgendwo gelesen, dass der Grund für die Änderung die höhere Sicherheit war. Das kann ich nicht bestreiten, da ich es nicht weiß. Ich kann Ihnen sagen, dass ich diesen Pfad nicht wirklich benutze. und werde mit dem Setup fortfahren, das ich für eine Weile benutzt habe. Ich mounte eine Festplatte speziell für virtuelle Hosts in / websites. Ich behalte eine ähnliche Struktur wie cpanel hosting und betreibe von / websites / vhostname / public_html. Auf diese Art kann ich den vhost benutzen, um Post oder was auch immer für den spezifischen vhost zu halten.
Chris
Eigentlich erwäge ich, eine Festplatte zu partitionieren und die Partitionen in das vhost-Verzeichnis für die einzelne vhost-Sicherung zu laden. das würde mir / websites / vhost / backup in jedem vhost geben (ich laufe ein paar und werde wahrscheinlich zu einem späteren Zeitpunkt mehr laufen)
Chris
24

Ich bin mit der Antwort von akond einverstanden, denke aber, dass es einen wichtigeren Aspekt gibt. Die meisten anderen Speicherorte (z. B. /usr/local) werden normalerweise vom System (dem Paketmanager) verwaltet. /varIn der Regel werden dort Dateien abgelegt, die nicht vom Paketmanager verwaltet werden (systemweite 'Daten').

Ich denke auch, dass die Definition aus dem FHS etwas genauer ist (die Daten müssen sich nicht "ständig ändern"):

/ var enthält variable Datendateien. Dies umfasst Spool-Verzeichnisse und -Dateien, Verwaltungs- und Protokollierungsdaten sowie vorübergehende und temporäre Dateien.


Allerdings sollte die FHS auch Arten, auf die www-Daten eingehen sollen/srv

/ srv enthält standortspezifische Daten, die von diesem System bereitgestellt werden.

Der Hauptzweck dieser Angabe besteht darin, dass Benutzer den Speicherort der Datendateien für einen bestimmten Dienst finden und dass Dienste, die einen einzigen Baum für schreibgeschützte Daten, beschreibbare Daten und Skripte (z. B. CGI-Skripte) benötigen, sinnvoll platziert werden können.

Die Methode zur Benennung der Unterverzeichnisse von / srv ist nicht festgelegt, da derzeit kein Konsens darüber besteht, wie dies erfolgen soll. Eine Methode zur Strukturierung von Daten unter / srv ist das Protokoll, z. ftp, rsync, www und cvs.

Patrick
quelle
7
Errr, der springende Punkt /usr/localist, dass es nicht vom Paketmanager verwaltet wird.
Derobert
@derobert / usr / local wird häufig von Paketen von Drittanbietern verwendet (Pakete, die nicht vom Repository der Distribution bereitgestellt werden). Es ist auch üblich, dass Unternehmen, die ihre eigenen Pakete erstellen, diese dort ablegen (obwohl dies immer noch unter Pakete fällt, die nicht von der Distribution bereitgestellt werden). Dies wird auch von der FHS unterstützt, siehe Anmerkung Nr. 27 ganz unten in pathname.com/fhs/pub/fhs-2.3.html
Patrick,
3
/srv/wwwwar auch der klassische Weg auf SuSE- Systemen (bis SLES10).
Nils
1
@nils warte, sie waren konform mit FHS und haben es dann absichtlich gelassen ??? Seufzer
Patrick
1
@Patrick so ist es - ich war ziemlich erstaunt, als ich das merkte. Wahrscheinlich wollten sie den anderen Linux-Varianten ähnlicher sein ...
Nils
13

Die Gründe sind meist historisch, wie andere sagten. /varwurde für Systemdaten verwendet, die sich ständig ändern, z. B. Cache-Dateien, Protokolle, Laufzeitdaten (z. B. Sperrdateien), Mail-Server-Speicher, Druckerspooling usw. Grundsätzlich für alle Dinge, die nicht eingegeben werden können /usr( Da es lokale Daten enthält, handelt es sich nicht um Programme von Drittanbietern, die eingehen /opt, und es ist nicht verwerfbar und flüchtig, wenn diese eingehen /tmp.

Mit der Entwicklung von Unix / Linux wurde es zu einem chaotischen Ort, an dem eine Vielzahl verschiedener unterschiedlicher Verzeichnisse zusammengestellt wurde. In den letzten Jahren gab es eine Tendenz, einige Dinge aus dem System zu entfernen, insbesondere Inhalte, die von der Maschine bereitgestellt werden (die nun gemäß [ Dateisystem-Hierarchie-Standard 2.3, S.15 ] eingehen sollten /srv, nicht eingehen/var/www ).

Ähnliches , was zu geschehen vor /var/runein paar Jahren - mit der konzentrierten Anstrengung von mehreren Verteilungen, wurde aus bewegt , /var/runin /runder die Funktionen der zuvor verwendeten miteinander verschmolzen /var/lock, /var/runund /dev/shm.

mindcorrosive
quelle
6

Nach meiner Erfahrung (ich bin ein Webentwickler) ist der Inhalt der Website alles andere als stabil. Auch bei HTML-Dateien (egal, welcher Inhalt dynamisch generiert wird) unterliegen sie ständigen Änderungen (Ergänzungen, Auslassungen usw.).

Aus meiner Sicht sind sie also Variablen. Sie passen also perfekt in das Verzeichnis / var und daran ist nichts auszusetzen.

akond
quelle
6
Ich würde nicht zustimmen. Ich sehe HTML-Dateien immer noch nicht als "sich ständig ändernd" an. An ihnen vorgenommene Änderungen sind absichtlich und würden idealerweise in eine Revisionskontrolle zur Änderungsverfolgung eingecheckt.
jonallard
2
Änderungen an der MySQL-Datenbank sind ebenfalls beabsichtigt, die Datenbankdateien befinden sich jedoch in / var / db. Stört dich nicht?
8.
5
Sicher, aber ich würde argumentieren, dass auf dem Kontinuum von Variable zu Konstante die DB variabler sein würde als die HTML / whatever / Web-Anwendung, da es weniger Versionen der Webseiten als der Datenbank gibt. Die Seiten mit relativ wenigen unterschiedlichen Versionen würde ich nicht einfügen /var. Aber ich denke, es ist eher eine Frage der Meinung und der Debatte als der harten Fakten.
jonallard
1
Was würden Sie sagen, wenn ich Ihnen eine Datenbank zeige, die seit zwei Jahren nicht mehr geändert wurde?
8.
2
Durch die hier angegebenen Argumente gehören Home-Verzeichnisse in / var. Dies gilt auch für / usr, da diese Datei für Sicherheitspatches usw. ständig aktualisiert wird. Das Argument, dass eine Datenbank nicht zu in / var gehört, stärkt nicht den Fall, dass Websites dies tun, sondern macht den Fall, dass dies nicht der Fall ist. Websites sind häufig gelesen und profitieren nicht von / var. Sie können wichtige Systemprozesse wie Protokollierung und E-Mail verlangsamen.
Duncan
6

IIRC, in den alten Tagen, wir montierten immer /varals sein eigenes Dateisystem (separate Festplatte oder Scheibe einer Scheibe) ist.

Einer der Gründe dafür ist, wie andere angegeben haben, dass das Dateisystem (logs / et al.) Viel gelesen / geschrieben wird. Eine separate Scheibe / Scheibe zu haben bedeutet , kann es besser für diese Art von I / O (lesen Sie weiter im Vergleich meist abgestimmt werden /, /usrusw ...).

Der andere Grund ist, dass in jenen Tagen, wenn Ihr System während eines Schreibvorgangs abstürzte, die Wahrscheinlichkeit sehr hoch war, dass Ihr Root-Dateisystem beschädigt wurde und es sich in einem schwer zu reparierenden Zustand befand. Somit ist die Notwendigkeit der Trennung von /.

Die Dateisystem- und Festplattentechnologie hat sich im Laufe der Zeit erheblich verbessert, so dass dies weit weniger wahrscheinlich ist.

Brian
quelle
1
/ var als separate Partition ist immer noch empfehlenswert, wenn Sie Ihren Computer nicht herunterfahren möchten, wenn Ihre Protokolle leer sind, da / voll ist
Duncan
3

/var ist eine gute Wahl für einen benutzerneutralen "Basis" -Standort für den Mehrbenutzerzugriff, falls Sie eine Website mit mehreren virtuellen Hosts haben, auf der FTP oder andere Uploads möglich sind, z. B. wenn Sie ein Webhost oder ähnliches sind.

/homemöglicherweise nicht optimal ist , weil schlechte Dinge für andere Benutzer - Shell - Konten passieren könnten , wenn ein gedankenlos oder böswillige Benutzer Uploads in die /homePartitionsgrenze (traditionelle Einrichtung unter der Annahme /var, /homeusw. auf separate Partitionen sind) es andere Benutzerkonten beeinflussen kann.

Natürlich denke ich, dass dies /srvbesser ist, aber es gibt es /varschon länger in der UNIX-Tradition.

LawrenceC
quelle
Distributionen und Distributed Packages sollten der FHS entsprechen. Der Endbenutzer (Sysadmin, wenn es sich um einen Server handelt) kann tun, was er will, und die Website an einen beliebigen Ort stellen. Ich habe Webseiten in / home / pub oder / home / web abgelegt, bevor es / srv gab. Aber wenn ich heute ein Webserver-Softwareprojekt verteilen würde, wäre / srv / www oder was auch immer FHS sagt die Standardeinstellung, obwohl der Administrator dies ändern kann.
Skaperen,
@ultrasawblade, warum nicht /home/http?
Pacerier
1

Was ich hier hinzufügen möchte, ist, dass das Setzen des Web "root" in / usr Konflikte mit dem Teil des FHS verursacht, der angibt, dass / usr gemeinsam genutzt werden kann und nur gelesen werden kann, da sich verschiedene Webserver sogar auf demselben "Cluster" befinden. Es kann unterschiedliche Dateien mit unterschiedlichen Konfigurationen geben, was es nicht ideal für / usr macht.

Darüber hinaus erwarten einige Webanwendungen (MediaWiki und PhpBB, um nur einige zu nennen) einen beschreibbaren Speicherort unter dem Webverzeichnisbaum für das Hochladen von Anhängen / Mediendateien. Wenn Sie den Webbaum unter / usr platzieren, kann dies zu Konflikten führen, wenn Sie die schreibgeschützte / usr-Definition einhalten möchten.

Didi Kohen
quelle
1

Auf Apache-Webservern befindet sich die Standardwebsite unter / var / www /. Es wird jedoch empfohlen , andere Websites unter / srv / zu platzieren.

Ich habe dies auf Ubuntu Server 14.04 LTS bemerkt. Die Standarddatei apache2.conf enthält einen kommentierten Block:

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