Dlaczego katalog główny na serwerze WWW jest domyślnie umieszczony w „/ var / www”?


87

Tuxfiles mówi o strukturze katalogów systemu Linux:

/var:

Ten katalog zawiera zmienne dane, które stale się zmieniają podczas działania systemu.

FHS on/var mówi, co następuje:

/varzawiera zmienne pliki danych. Obejmuje to katalogi i pliki buforowania, dane administracyjne i rejestrujące oraz pliki przejściowe i tymczasowe.

Następnie mówią, że takie rzeczy, jak dzienniki, poczta i bufor są umieszczone w tym folderze.

Tradycyjnie standardowa instalacja Apache lub Nginx na Ubuntu Linux umieści katalog na /var/www/.

Nie wydaje mi się idealnym miejscem do umieszczenia katalogu z plikami lub innymi treściami, które powinny być prawie trwałe.

Dlaczego jest tak często wprowadzany /var?

Mówiąc bardziej subiektywnie, czy jest to miejsce, do którego powinno idealnie iść, zgodnie ze strukturą katalogów?


2
To dobre pytanie, które też często zadawałem sobie i jakoś to ułożyłem :).
wilk

1
Według FHS /var/lib/wwwbyłoby bardziej odpowiednie ...
Nils,

3
Obecny FHS twierdzi, że root serwera WWW powinien być gdzieś poniżej/srv
LogicDaemon

1
/varjest przeznaczony do niewykonywalnych, niezwiązanych z konfiguracją danych, które nie są własnością rzeczywistego użytkownika, które można edytować lub zmieniać (np. powinny znajdować się na wolumenie wielokrotnego zapisu). /var/libjest specjalnie dla tego typu danych, które powinny przetrwać restart i nie mogą zostać usunięte przez proces konserwacji, isc-dhcp-serverużywa na przykład /var/libdo przechowywania swojego rejestru dzierżaw DHCP. Byłoby to więc logiczne miejsce dla plików serwera WWW.
LawrenceC

@Nils, Dlaczego lib?
Pacerier

Odpowiedzi:


35

To wcale nie jest „tradycyjna” lokalizacja. Tradycyjnie wszystko, co zainstalowałeś po wejściu systemu operacyjnego /usr/local, i tak naprawdę jest to „klasyczny układ ścieżki Apache” (ich słowa) do dziś. Tak było przez długi czas /home/httpd.

To, co widzisz, to to, że Apache skonfigurowany dla konkretnego systemu operacyjnego - niezależnie od tego, czy jest to Red Hat Linux, Mac OS X, GNU itp. - dostosuje lokalizację. Źródło Apache jest do tego dobrze zaprojektowane, w rzeczywistości, jeśli prześledzisz wartość ServerRoot w plikach źródłowych, zobaczysz, że zaczyna się ona w tym pliku config.layout:

Niektóre fragmenty tego pliku pokażą, że istnieje duża różnorodność w lokalizacji docroot.

IIRC, /var/wwwpojawiło się w moim życiu wraz z wydaniami Red Hat Linux 7.x 2000-2001 (nie Red Hat Enterprise Linux). Ze wszystkich powodów, które przytaczasz powyżej, myślałem, że to nie ma większego sensu - ale w rzeczywistości w epoce nowożytnej tak wiele innych narzędzi i technologii jest zaangażowanych, a lokalizacja się zmienia.

#   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

Używanie /var/wwwjest mylące tylko na pierwszy rzut oka.

Według FHS dane serwera sieciowego powinny trafić do /srv. To jest główna zasada.

Jednak mówi również, że decyzja o strukturze /srvjest wyłączną odpowiedzialnością lokalnego administratora! Dlatego pakiety nie mogą niczego umieszczać /srv, a domyślny katalog główny nie może /srv, ponieważ pakiet (apache) nie wie, co jest w nim /srvi pod nim. Może repozytorium subversion z wyraźnym hasłem tekstowym i innymi rzeczami. Więc musi istnieć domyślna wartość poza /srv. To domyślne staje się /var/www.

/var/wwwjest głównie symbolem zastępczym. Pakiety używają /usr/sharedo statycznej treści HTML lub /var/libdo dynamicznej zawartości zmiennej. Wiele osób błędnie myślało, że powinni umieścić HTML /var/www. To jest problem, ponieważ paczki również czasami tego używają. Ostatnio wymyślili /var/www/htmldla pakietów. Mam nadzieję, że ludzie nie zaczną z tego korzystać, ponieważ znowu muszą wymyślić nowy katalog ... i tak dalej.

Podsumowanie: należy odpowiednio używać /srvi konfigurować wirtualnych hostów Apache.


5
Ta odpowiedź jest naprawdę cenna. „Mam nadzieję, że ludzie nie zaczną z tego korzystać, ponieważ znowu muszą wymyślić nowy katalog ... i tak dalej.” Pokazuje, że wielu administratorów powinno poświęcić trochę czasu i zapoznać się z podstawami. (tak jak robię teraz;))
Toastgeraet

Stało się to już w wersjach Ubuntu. katalog główny apache domyślnie to / var / www / html. Przeczytałem gdzieś, że przyczyną zmiany było to, że jest bardziej bezpieczne. nie mogę się z tym zgodzić, ponieważ nie wiem. Mogę powiedzieć, że tak naprawdę nie będę korzystać z tej ścieżki. i kontynuuję konfigurację, z której korzystam od dłuższego czasu. Montuję dysk specjalnie dla wirtualnych hostów w / witrynach. Utrzymuję strukturę podobną do hostingu cpanel i obsługuję z / sites / vhostname / public_html. W ten sposób mogę użyć vhosta do przechowywania poczty lub czegokolwiek dla konkretnego vhosta.
Chris

Naprawdę zastanawiam się nad podzieleniem dysku na partycje i zamontowaniem partycji w katalogu vhost w celu utworzenia indywidualnej kopii zapasowej vhost. co dałoby mi / strony internetowe / vhost / backup w każdym vhostie (uruchamiam kilka i prawdopodobnie będzie więcej działał w późniejszym terminie)
Chris

24

Chociaż zgadzam się z odpowiedzią Akonda, myślę, że jest w tym ważniejszy aspekt. Większość innych lokalizacji (takich jak /usr/local) jest zazwyczaj zarządzana przez system (menedżer pakietów). /varjest zwykle tam, gdzie idą pliki, które nie są zarządzane przez menedżera pakietów (ogólnosystemowe „dane”).

Myślę też, że definicja z FHS jest nieco dokładniejsza (dane nie muszą być „ciągle zmieniane”):

/ var zawiera zmienne pliki danych. Obejmuje to katalogi i pliki buforowania, dane administracyjne i rejestrujące oraz pliki przejściowe i tymczasowe.


Jednak FHS określa również gatunki, w które powinny wchodzić dane www/srv

/ srv zawiera dane właściwe dla witryny, które są obsługiwane przez ten system.

Głównym celem określenia tego jest, aby użytkownicy mogli znaleźć lokalizację plików danych dla konkretnej usługi, a także aby usługi wymagające pojedynczego drzewa dla danych tylko do odczytu, danych zapisywalnych i skryptów (takich jak skrypty cgi) mogły być rozsądnie umieszczone.

Metodologia stosowana do nazewnictwa podkatalogów / srv jest nieokreślona, ​​ponieważ obecnie nie ma zgody co do tego, jak należy to zrobić. Jedną z metod strukturyzacji danych w / srv jest protokół, np. ftp, rsync, www i cvs.


7
Błąd, chodzi o /usr/localto, że nie jest zarządzany przez menedżera pakietów.
derobert

@derobert / usr / local jest często używany przez pakiety innych firm (pakiety nie dostarczane przez repo dystrybucji). Często zdarza się, że firmy, które budują własne pakiety, umieszczają je tam (choć nadal dotyczy to pakietów nie dostarczanych przez distro). Jest to obsługiwane również przez FHS, patrz uwaga nr 27 na samym dole pathname.com/fhs/pub/fhs-2.3.html
Patrick

3
/srv/wwwbyła również klasyczną ścieżką w systemach SuSE (do SLES10).
Nils

1
@nils czekać, były zgodne z FHS, a następnie celowo zostawił to ??? westchnienie
Patrick,

1
@Patrick, więc tak - byłem całkiem zaskoczony, kiedy to zrozumiałem. Prawdopodobnie chcieli być bardziej podobni do innych wariantów Linuksa ...
Nils,

13

Powody są głównie historyczne, jak powiedzieli inni. /varbył używany do danych systemowych, które cały czas się zmieniają, na przykład pliki pamięci podręcznej, dzienniki, dane środowiska wykonawczego (na przykład pliki blokowania), pamięć serwera poczty, buforowanie drukarki itp. Zasadniczo do wszystkich rzeczy, których nie można umieścić /usr( ponieważ zawiera dane lokalne), nie są programami innych firm, które się do nich wprowadzają /opt, a także nie są usuwalne i niestabilne /tmp.

W miarę rozwoju systemu Unix / Linux stało się to nieporządne miejsce z mnóstwem różnych niepowiązanych katalogów. W ostatnich latach pojawiła się tendencja do przenoszenia niektórych rzeczy, w szczególności treści obsługiwanych przez maszynę (które zgodnie z [ Fileystem Hierarchy Standard 2.3, str. 15 ] powinny wchodzić /srv, a nie wchodzić /var/www).

Podobnie rzecz się do /var/runkilku lat wstecz - ze skoncentrowanego wysiłku kilku dystrybucjach, został przeniesiony z /var/runpod /runktórego zrośnięte funkcje wcześniej używany /var/lock, /var/runi /dev/shm.


6

Z mojego doświadczenia (jestem programistą) zawartość witryny jest daleka od stabilności. Nawet w przypadku plików HTML (bez względu na dynamicznie generowaną treść) podlegają one ciągłym zmianom (poprawki, pominięcia itp.).

Z mojego punktu widzenia są to zmienne. Dlatego idealnie pasują do katalogu / var i nie ma w tym nic złego.


6
Nie zgodziłbym się. Nadal nie widzę plików HTML jako „ciągle zmieniających się”. Wprowadzane w nich zmiany są celowe i idealnie byłyby sprawdzone w kontroli poprawek do śledzenia zmian.
jonallard

2
Zmiany w bazie danych MySQL również są celowe, ale pliki bazy danych znajdują się w / var / db. Nie przeszkadza ci to
akond

5
Jasne, że tak, ale argumentowałbym, że w kontinuum od zmiennej do stałej DB byłby bardziej zmienny niż aplikacja HTML / cokolwiek / web, ponieważ jest mniej wersji stron internetowych niż bazy danych. Strony posiadające stosunkowo niewiele różnych wersji, nie umieszczałbym /var. Myślę jednak, że jest to kwestia opinii i debaty, a nie twardych faktów.
jonallard

1
Co byś powiedział, gdybym pokazał Ci bazę danych, która nie była zmieniana przez dwa lata?
akond

2
Według podanych tutaj argumentów katalogi domowe należą do / var. Jeśli o to chodzi, to samo dotyczy / usr, ponieważ jest on stale aktualizowany dla poprawek bezpieczeństwa itp. / Var jest dla plików, które „często” zmieniają się, co pozwala na zamontowanie systemu plików zoptymalizowanego do ciężkich zapisów małych plików. Argumentowanie, że baza danych nie należy do katalogu / var, nie wzmacnia przypadku, w którym robią to strony internetowe, naprawdę sprawia, że ​​tak nie jest. Strony internetowe są intensywnie czytane i nie czerpią korzyści z bycia na / var, i mogą faktycznie spowolnić podstawowe procesy systemowe, takie jak logowanie i e-mail.
Duncan

6

IIRC w dawnych czasach zawsze montowaliśmy /varjako własny system plików (oddzielny dysk lub jego fragment).

Jednym z powodów tego, jak stwierdzili inni, jest duży odczyt / zapis w tym systemie plików (logs / et al). Mając na osobnym dysku / kawałek oznacza, że może być lepiej dostosowana do tego typu I / O (w porównaniu z najczęściej czytać /, /usritp ...).

Innym powodem jest to, że w tamtych czasach, jeśli system ulegał awarii podczas operacji zapisu, istniała bardzo duża szansa, że ​​główny system plików może zostać uszkodzony, pozostawiając go w trudnym do naprawy stanie. Zatem potrzeba oddzielenia od /.

Technologia plików i dysków uległa znacznej poprawie w czasie, więc jest to znacznie mniej prawdopodobne zjawisko.


1
/ var jako osobna partycja jest nadal dobrą praktyką, jeśli nie chcesz obniżać poziomu maszyny, gdy logi szaleją z powodu / pełnego zapełnienia
Duncan

3

/var jest przyzwoitym wyborem dla neutralnej dla użytkownika „podstawowej” lokalizacji dla dostępu dla wielu użytkowników, w przypadku gdy masz witrynę z wieloma wirtualnymi hostami, która umożliwia FTP lub inne przesyłanie, tj. jeśli jesteś hostem internetowym lub podobnym.

/homeJest to prawdopodobnie nie jest optymalny, ponieważ złe rzeczy mogą się zdarzyć na inne konto shell użytkownik Jeżeli bezmyślne lub złośliwe przesłane przez użytkownika do /homegranicy rozdzielającej (zakładając tradycyjną konfigurację /var, /homeitd będąc na oddzielnych partycjach) może wpływać na inne konta użytkowników.

Oczywiście myślę, że /srvjest to lepsze, ale /varjest już dłużej w tradycji UNIX.


Dystrybucje i pakiety rozproszone powinny być zgodne z FHS. Końcowy „użytkownik” (sysadmin, jeśli jest to serwer) może robić, co chce i umieszczać witrynę internetową w dowolnym miejscu. Umieszczałem strony internetowe w / home / pub lub / home / web, odkąd wcześniej był / srv. Ale jeśli miałbym dzisiaj rozpowszechniać projekt oprogramowania serwera WWW, domyślnie byłaby / srv / www lub cokolwiek, co mówi FHS, choć administrator może to zmienić.
Skaperen

@ultrasawblade, dlaczego nie /home/http?
Pacerier

1

Chciałbym tutaj dodać, że umieszczenie internetowego „roota” w / usr powoduje konflikt z tą częścią FHS, która wskazuje, że / usr może być udostępniany tylko do odczytu, ponieważ różne serwery sieciowe, nawet w tym samym „klastrze” może mieć różne pliki zawierające różne konfiguracje, co nie czyni go idealnym dla / usr.

Ponadto niektóre aplikacje internetowe (MediaWiki i PhpBB, aby wymienić te z góry mojej głowy) oczekują możliwej do zapisu lokalizacji pod drzewem katalogów WWW do przesyłania załączników / plików multimedialnych. Tak więc umieszczenie drzewa w katalogu / usr byłoby sprzeczne, jeśli chcesz zastosować definicję / usr tylko do odczytu.


1

Serwer WWW Apache ma domyślną stronę pod / var / www /, ale sugeruje się umieszczenie innych stron pod / srv /

Zauważyłem to na Ubuntu Server 14.04 LTS. Domyślny plik apache2.conf zawiera skomentowany blok:

#<Directory /srv/>
#   Options Indexes FollowSymLinks
#   AllowOverride None
#   Require all granted
#</Directory>
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.