Neden bir web sunucusundaki kök dizini varsayılan olarak “/ var / www” içine koyuyor?


87

Tuxfiles , Linux dizin yapısı hakkında şunları söylüyor:

/var:

Bu dizin, sistem çalışırken sürekli değişen değişken veriler içerir.

FHS on/var şunları söylüyor:

/vardeğişken veri dosyaları içerir. Bu, biriktirme dizinleri ve dosyaları, yönetimsel ve günlük verileri ile geçici ve geçici dosyaları içerir.

Daha sonra, günlükler, postalar ve biriktirici gibi şeylerin bu klasöre konulduğunu söylemeye devam ederler.

Geleneksel olarak Ubuntu Linux'ta Apache veya Nginx hisse senedi kurulumu dizini yerleştirecektir /var/www/.

Bana bir dosya koymak için ideal bir yer gibi görünmüyor ya da neredeyse kalıcı olması gereken içeriğe sahip.

Neden bu kadar sık ​​kullanılıyor /var?

Daha öznel olarak, dizin yapısına göre, ideal olarak gitmesi gereken yer burası mı?


2
Bu da kendime sık sık sorduğum ve bir şekilde onunla düzenlediğim iyi bir soru :).
kurt

1
FHS'ye göre /var/lib/wwwdaha uygun olurdu ...
Nils

3
Mevcut FHS, web sunucusu kökünün aşağıda bir/srv
LogicDaemon

1
/varçalıştırılabilir olmayan konfigürasyon için, düzenlenebilir veya değiştirilebilen, gerçek-kullanıcı-olmayan-kullanıcı-verisi içindir (örneğin, yeniden yazılabilir bir hacimde yaşamalıdır). /var/libÖzellikle yeniden başlatmayı hayatta kalmak ve gereken veri türü için bir bakım işlemi tarafından silinecek olan, isc-dhcp-serverkullanan /var/libDHCP ile rekor örneğin kiraladığı saklamak için. Bu yüzden web sunucusu dosyaları için mantıklı bir nokta olurdu.
LawrenceC

@Nils, Neden lib?
Pacerier,

Yanıtlar:


35

Aslında hiç "geleneksel" bir yer değil. Geleneksel olarak, işletim sisteminden sonra yüklediğiniz her şey /usr/localve aslında bu güne kadarki "Klasik Apache yolu düzeni" (sözcükleri). Uzun zamandır öyleydi /home/httpd.

Gördüğünüz şey, belirli bir işletim sistemi için yapılandırılmış bir Apache - ister Red Hat Linux, Mac OS X, GNU, vb. - konumu özelleştirecek. Apache'nin kaynağı bunun için iyi tasarlanmış, aslında kaynak dosyalardaki ServerRoot değerini izlerseniz, bu dosyada başladığını göreceksiniz config.layout:

Bu dosyadan bazı alıntılar docroot konumunda çok fazla çeşitlilik olduğunu size gösterecektir.

IIRC, /var/www2000-2001 Red Hat Linux 7.x (Red Hat Enterprise Linux değil) sürümleriyle hayatıma girdi. Yukarıda bahsettiğin tüm nedenlerden ötürü, bunun pek mantıklı gelmediğini düşündüm - ama gerçek şu ki, modern çağda o kadar çok başka araç ve teknoloji yer alıyor ki, konum yine de hareket ediyor.

#   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

Kullanımı /var/wwwsadece ilk bakışta kafa karıştırıcıdır.

FHS'ye göre, web sunucusu verilerine gitmeli /srv. Ana kural budur.

Ancak, yapı hakkında karar vermenin /srvyerel yöneticinin sorumluluğunda olduğunu da söylüyor ! Bu nedenle, paketler hiçbir şey koymalı /srvve varsayılan belge kökü olmamalıdır /srv, çünkü (apache) paketi içinde /srvve altında ne olduğunu bilmez . Belki de açık metin şifresi ve diğer şeyleri içeren bir yıkım deposu. Yani dışında bir varsayılan olmalı /srv. Bu varsayılan olur /var/www.

/var/wwwçoğunlukla bir yer tutucudur. Paketler /usr/sharestatik HTML içeriği veya /var/libdinamik değişken içeriği için kullanır. Birçok insan yanlışlıkla HTML kodunu koymaları gerektiğini düşündü /var/www. Bu bir problem, çünkü paketler zaman zaman bunu da kullanıyor. Son zamanlarda /var/www/htmlpaketler için icat ettiler . Umarım insanlar bunu kullanmaya başlamazlar çünkü o zaman tekrar yeni bir dizin icat etmek zorunda kalırlar ... ve böyle devam eder.

Özet: /srvApache sanal konaklarınızı buna göre kullanmalı ve yapılandırmalısınız.


5
Bu cevap gerçekten değerli. "Umarım insanlar bunu kullanmaya başlamaz çünkü o zaman tekrar yeni bir dizin icat etmek zorunda kalırlar ..." Birçok yöneticinin zaman ayırması ve bazı temel bilgileri okuması gerektiğini gösterir. (şu anda yapıyorum gibi;))
Toastgeraet

Bu zaten Ubuntu versiyonlarında oldu. apache belge kökü varsayılanlarını / var / www / html olarak değiştirdim, değişikliğin sebebinin daha güvenli olduğunu bir yerlerde okudum. Bunu bilmediğim için itiraz edemem. Size gerçekten bu yolu kullanmayacağımı söyleyebilirim. ve bir süredir kullanmakta olduğum kuruluma devam edeceğim. Bir diski / web sitelerinde bulunan sanal ana bilgisayarlar için özel olarak Cpanel hosting ve / websites / vhostname / public_html adresinden servis yapmaya benzer bir yapı tutuyorum. Bu şekilde, vhost'u posta tutmak için veya belirli bir vhost için ne olursa olsun kullanabilirim.
Chris,

Aslında bir diski bölümlendirmeyi ve bölümleri bireysel vhost yedeklemesi için vhost dizinine yerleştirmeyi düşünüyorum. her bir vhost'ta bana / web siteleri / vhost / backup verecek (birkaç koştum ve muhtemelen daha sonraki bir tarihte daha fazla koşacağım)
Chris

24

Akond'ın cevabını kabul ederken, bunun daha önemli bir yönü olduğunu düşünüyorum. Diğer konumların çoğu (örneğin /usr/local) sistem tarafından yönetilir (paket yöneticisi). /vargenellikle paket yöneticisi tarafından yönetilmeyen dosyaların gittiği yerdir (sistem çapında 'veri').

Ayrıca FHS'den gelen tanımlamanın biraz daha doğru olduğunu düşünüyorum (verilerin sürekli değişmesi gerekmiyor):

/ var değişken veri dosyaları içerir. Bu, biriktirme dizinleri ve dosyaları, yönetimsel ve günlük verileri ile geçici ve geçici dosyaları içerir.


Ancak FHS , www verilerinin girmesi gereken türler de/srv

/ srv, bu sistem tarafından sunulan siteye özgü verileri içerir.

Bunu belirlemenin bu ana amacı, kullanıcıların belirli servisler için veri dosyalarının konumunu bulabilmeleri ve böylece salt okunur veri, yazılabilir veri ve komut dosyaları (cgi komut dosyaları gibi) için tek bir ağaç gerektiren servislerin makul şekilde yerleştirilebilmesidir.

/ Srv alt dizinlerini adlandırmak için kullanılan metodoloji, şu anda bunun nasıl yapılması gerektiği konusunda bir fikir birliği olmadığı için belirtilmemiştir. / Srv altında veri yapılandırmak için bir yöntem, örn. ftp, rsync, www ve cvs.


7
Errr, bütün mesele /usr/localonun olmasıdır değil paket yöneticisi tarafından yönetilir.
derobert

@derobert / usr / local, 3. parti paketlerinde (distro deposunda bulunmayan paketler) çok kullanılmaktadır. Ayrıca, kendi paketlerini oraya koymak için kendi şirketleri kuran şirketler için de yaygındır (yine de dağıtım tarafından sağlanmayan paketlerin altına düşmektedir). Bu, FHS tarafından da desteklenmektedir, pathname.com/fhs/pub/fhs-2.3.html
Patrick

3
/srv/wwwSuSE sistemlerinde de klasik yoldu (SLES10'a kadar).
Nils,

1
@nils bekleyin, FHS ile uyumluydu ve kasıtlı olarak bıraktılar ??? iç çekiş
Patrick

1
@Patrick öyleyse öyle - Bunu fark ettiğimde çok şaşırmıştım. Muhtemelen daha çok diğer Linux varyantları gibi olmak istiyorlardı ...
Nils

13

Diğerleri dediği gibi nedenler çoğunlukla tarihi. /varTemelde koymak edilemez tüm şeyler için vb (örneğin, dosyaları kilitlemek) örneği önbellek dosyaları, günlükleri, çalışma zamanı verileri için, her zaman değiştirir sistem verilerinin, posta sunucusu depolama, yazıcı biriktirme için kullanılmaktadır /usr( çünkü yerel veri içeriyor), içeri giren üçüncü taraf programlar /optdeğiller ve içeri girdikçe yok edilebilecek ve değişken değiller /tmp.

Unix / Linux geliştikçe, bir araya getirilen çeşitli farklı dizinlerden oluşan bir çit boşluğu ile dağınık bir yer haline geldi. (Şimdi uyarınca [makine tarafından sunulan özellikle içerik, oradan bazı şeyleri taşımak için son yıllarda bir eğilim olmuştur Dosya Sistemi Hiyerarşi Standardı 2.3, s.15 ] içinde gitmeli /srvdeğil de, /var/www).

Benzer şey oldu /var/rungeri birkaç yıl - Çeşitli dağılımların konsantre çaba ile, o taşındı /var/runiçine /runönceden kullanılan fonksiyonlarını birbirine kaynaşmış olan /var/lock, /var/runve /dev/shm.


6

Tecrübelerime göre (ben bir web geliştiricisiyim) web sitesi içeriği stabil olmaktan uzak. Html dosyalarında bile (dinamik olarak oluşturulmuş içeriği boş bıraktıysanız), sürekli değişikliklere (değişiklikler, ihmaller vb.) Maruz kalırlar.

Yani benim açımdan, değişkenler. Bu nedenle, / var dizininde mükemmel bir şekilde uyarlar ve bunda yanlış bir şey yok.


6
Katılmıyorum. Hala HTML dosyalarını "sürekli değişiyor" olarak görmüyorum. Onlara yapılan değişiklikler bilinçlidir ve ideal olarak değişiklik takibi için revizyon kontrolünde kontrol edilir.
jonallard

2
Mysql veritabanındaki değişiklikler de kasıtlıdır, ancak veritabanı dosyaları / var / db'de bulunur. Seni rahatsız etmiyor?
akond

5
Tabii ki, ancak değişkenden sabite kadar süreklilikte, web sayfalarının veritabanından daha az sürümünün bulunduğundan DB'nin HTML / whatever / web uygulamasından daha değişken olacağını savunuyorum. Görece az sayıda farklı sürümlerine sahip sayfalar, ben koymak olmaz /var. Ancak bunun zor gerçeklerden ziyade bir fikir ve tartışma meselesi olduğunu düşünüyorum.
jonallard

1
Size iki yıl boyunca değiştirilmemiş bir veritabanı gösterirsem ne söylersiniz?
akond

2
Burada verilen argümanlara göre, ev dizinleri / var aittir. Bu nedenle, / usr, güvenlik düzeltme ekleri, vb. İçin sürekli güncellenir, çünkü / var, "sık sık" değişen dosyalar için kullanılır; bu, birinin küçük dosyaların ağır yazıları için optimize edilmiş bir dosya sistemini monte etmesine olanak tanır. Bir veritabanının / var içine ait olmadığını iddia etmek, web sitelerinin yaptığı durumu güçlendirmez, gerçekten yapmadıkları durumu yapar. Web siteleri yoğun okunur ve açık / var olmanın hiçbir yararı yoktur ve aslında günlüğe kaydetme ve e-posta gibi temel sistem işlemlerini yavaşlatabilir.
Duncan

6

IIRC, eski günlerde, her zaman /varkendi dosya sistemi (ayrı bir disk veya bir disk dilim) olarak monte ettik .

Bunun nedenlerinden biri, diğerlerinin de belirttiği gibi, bu dosya sistemine çok fazla okuma / yazma yapılmasıdır (logs / et al). Ayrı bir disk / dilim olması (çoğunlukla okumaya karşı daha iyi I / O tipi için ayarlanmış olabilir demektir /, /usrvb ...).

Diğer bir sebep de, o günlerde, bir yazma işlemi sırasında sisteminiz çökerse, kök dosya sisteminizin onarımı zor bir durumda bırakarak bozulma olasılığı çok yüksekti. Böylece ondan ayrılma ihtiyacı var /.

Dosya sistemi ve disk teknolojisi zamanla büyük ölçüde gelişti, bu yüzden bu çok daha az olası bir durum.


1
Eğer günlükleri nedeniyle, yaban giderken Makinenizi çökertmek için istemiyorsanız ayrı bölüm olarak / var hala iyi uygulama olduğunu / tam olarak
Duncan

3

/var Çok kullanıcılı erişim için kullanıcı-nötr "temel" bir konum için iyi bir seçimdir, eğer çalışan birden fazla sanal ana bilgisayara sahip bir web siteniz varsa, FTP ya da diğer yüklemelere izin veren, yani bir webhost ya da benzerseniz.

/homeBir düşünmeyen veya kötü amaçlı kullanıcıların yüklediği eğer kötü şeyler diğer kullanıcı kabuk hesaplarına başına gelebilir, çünkü muhtemelen en uygun olmadığı /homebölüm sınırı (geleneksel kurulum varsayarak /var, /homevb ayrı bölümlere olmak üzere) diğer kullanıcı hesaplarını etkileyebilir.

Tabi bunun /srviçin daha iyi olduğunu düşünüyorum ama /varUNIX geleneğinde daha uzun süredir var.


Dağıtımlar ve dağıtılmış paketler FHS'ye uygun olmalıdır. Son "user" (sunucusuysa sysadmin) istediği gibi yapabilir ve web sitesini her yere koyabilir. / Srv olduğundan / web sitelerini / home / pub veya / home / web içerisine yerleştirdim. Ancak bugün bir web sunucusu yazılım projesini dağıtmak isteseydim, / srv / www ya da FHS'nin söylediği her şey varsayılan olacaktır, ancak yönetici bunu değiştirebilirdi.
Skaperen

@ultrasawblade, Neden olmasın /home/http?
Pacerier,

1

Buraya eklemek istediğim şey, / usr webine "root" koymak, aynı web kümesinde bile farklı web sunucularından beri / usr'yi yalnızca paylaşılabilir ve okunabilir olarak gösteren FHS bölümüyle çakışıyor. farklı yapılandırmalar içeren farklı dosyalara sahip olabilir ve bu, / usr için ideal yapmaz.

Ayrıca, bazı web uygulamaları (MediaWiki ve PhpBB, başımın üstünde olanları adlandırır) ekler / medya dosyası yüklemeleri için web dizin ağacının altında yazılabilir bir konum bekler. Bu nedenle, salt okunur / usr tanımına uymak istiyorsanız web ağacını / usr altına koymak çakışacaktır.


1

Apache web sunucusu / var / www / altında varsayılan web sitesine sahiptir , ancak diğer web sitelerinin / srv / altında bırakılması önerilmektedir.

Bunu Ubuntu Server 14.04 LTS'de farkettim. Varsayılan apache2.conf dosyası yorumlanmış blok içeriyor:

#<Directory /srv/>
#   Options Indexes FollowSymLinks
#   AllowOverride None
#   Require all granted
#</Directory>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.