Mengapa direktori root pada server web dimasukkan secara default di "/ var / www"?

87

Tuxfiles mengatakan yang berikut tentang struktur direktori Linux:

/var:

Direktori ini berisi data variabel yang berubah secara konstan saat sistem berjalan.

FHS on/var mengatakan sebagai berikut:

/varberisi file data variabel. Ini termasuk direktori spool dan file, data administratif dan logging, dan file sementara dan sementara.

Mereka kemudian melanjutkan dengan mengatakan bahwa hal-hal seperti log, mail, dan spooler diletakkan di folder itu.

Secara tradisional, instalasi stok Apache atau Nginx di Ubuntu Linux akan menempatkan direktori di /var/www/.

Menurut saya itu bukan tempat yang ideal untuk meletakkan direktori dengan file atau konten yang seharusnya hampir permanen.

Mengapa begitu sering dimasukkan /var?

Lebih subyektif, apakah ini tempat idealnya, menurut struktur direktori?

Jonallard
sumber
2
Ini adalah pertanyaan yang bagus yang sering saya tanyakan pada diri saya sendiri dan diatur dengan cara apa pun :).
serigala
1
Menurut FHS /var/lib/wwwakan lebih cocok ...
Nils
3
FHS saat ini mengatakan root server web harus berada di suatu tempat di bawah ini/srv
LogicDaemon
1
/varadalah untuk data non-konfigurasi yang tidak dapat dieksekusi yang tidak dimiliki oleh pengguna nyata yang dapat diedit atau diubah (mis. harus hidup dengan volume yang dapat ditulis ulang). /var/libkhusus untuk tipe data yang harus selamat dari reboot dan tidak dihapus oleh proses pemeliharaan, isc-dhcp-serverdigunakan /var/libuntuk menyimpan catatan penyewaan DHCP misalnya. Jadi itu akan menjadi tempat yang logis untuk file server web.
LawrenceC
@Nils, Kenapa lib?
Pacerier

Jawaban:

35

Ini sebenarnya bukan lokasi "tradisional" sama sekali. Secara tradisional, apa pun yang Anda instal setelah OS masuk /usr/local, dan memang itulah "Tata letak jalur Apache Klasik" (kata-kata mereka) hingga hari ini. Untuk waktu yang lama /home/httpd.

Apa yang Anda lihat adalah bahwa Apache yang telah dikonfigurasi untuk OS tertentu - apakah itu Red Hat Linux, Mac OS X, GNU, dll - akan menyesuaikan lokasi. Sumber Apache dirancang dengan baik untuk ini, sebenarnya jika Anda melacak nilai untuk ServerRoot dalam file sumber, Anda akan melihat bahwa itu dimulai dalam file ini, config.layout:

Beberapa kutipan dari file itu akan menunjukkan kepada Anda bahwa ada banyak variasi di lokasi docroot.

IIRC, /var/wwwdatang ke dalam hidup saya dengan rilis 2000-2001 Red Hat Linux 7.x (bukan Red Hat Enterprise Linux). Untuk semua alasan yang Anda sebutkan di atas, saya pikir itu tidak masuk akal - tetapi kenyataannya adalah bahwa di era modern begitu banyak alat dan teknologi yang terlibat, lokasi tetap bergerak.

#   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
sumber
33

Penggunaan /var/wwwmembingungkan hanya pada pandangan pertama.

Menurut FHS, data server web harus pergi ke /srv. Itu adalah aturan utama.

Namun, ia juga mengatakan bahwa memutuskan tentang struktur /srvadalah satu-satunya tanggung jawab administrator lokal! Oleh karena itu paket tidak boleh memasukkan apa pun ke dalamnya /srv, dan root dokumen default tidak boleh /srv, karena paket (apache) tidak tahu apa yang ada di dalam /srvdan di bawahnya. Mungkin repositori subversi dengan kata sandi teks yang jelas dan hal-hal lain juga. Jadi harus ada default di luar /srv. Default itu menjadi /var/www.

/var/wwwsebagian besar adalah penampung. Paket digunakan /usr/shareuntuk konten HTML statis, atau /var/libuntuk konten variabel dinamis. Banyak orang secara keliru berpikir bahwa mereka harus memasukkan HTML /var/www. Itu masalah, karena paket terkadang menggunakannya juga. Jadi baru-baru ini mereka menemukan /var/www/htmlpaket. Mudah-mudahan orang tidak akan mulai menggunakannya karena sekali lagi mereka harus menemukan direktori baru ... dan seterusnya.

Ringkasan: Anda harus menggunakan /srvdan mengkonfigurasi host virtual Apache Anda sesuai.

Hontvári Levente
sumber
5
Jawaban ini sangat berharga. "Mudah-mudahan orang tidak akan mulai menggunakannya karena sekali lagi mereka harus menemukan direktori baru ... dan seterusnya." Menunjukkan bahwa banyak administrator harus meluangkan waktu dan membaca beberapa dasar. (seperti yang saya lakukan sekarang;))
Toastgeraet
Ini sudah terjadi dalam versi Ubuntu. default root dokumen apache ke / var / www / html saya membaca di suatu tempat bahwa alasan perubahan itu lebih aman. saya tidak bisa ikut serta karena saya tidak tahu. Saya dapat memberitahu Anda bahwa saya sebenarnya tidak akan menggunakan jalur itu. dan akan melanjutkan dengan pengaturan yang telah saya gunakan untuk sementara waktu. Saya memasang disk khusus untuk host virtual di / situs web. Saya memiliki struktur yang mirip dengan hosting cpanel dan melayani dari / websites / vhostname / public_html. Dengan cara ini saya dapat menggunakan vhost untuk menyimpan email atau apa pun untuk vhost tertentu.
Chris
Saya sebenarnya mempertimbangkan mempartisi disk dan memasang partisi ke direktori vhost untuk cadangan vhost individu. yang akan memberi saya / situs web / vhost / cadangan di masing-masing vhost (saya menjalankan beberapa dan mungkin akan berjalan lebih banyak di kemudian hari)
Chris
24

Sementara saya setuju dengan jawaban akond, saya pikir ada aspek yang lebih penting untuk itu. Sebagian besar lokasi lain (seperti /usr/local) biasanya dikelola oleh sistem (manajer paket). /varbiasanya tempat file yang tidak dikelola oleh manajer paket ('data' sistem lebar).

Saya juga berpikir definisi dari FHS sedikit lebih akurat (data tidak harus "terus berubah"):

/ var berisi file data variabel. Ini termasuk direktori spool dan file, data administratif dan logging, dan file sementara dan sementara.


Namun FHS juga menyebutkan bahwa data www harus dimasukkan/srv

/ srv berisi data spesifik situs yang dilayani oleh sistem ini.

Tujuan utama menentukan ini adalah agar pengguna dapat menemukan lokasi file data untuk layanan tertentu, dan agar layanan yang memerlukan satu pohon untuk data yang hanya dapat dibaca, data yang dapat ditulis dan skrip (seperti skrip cgi) dapat ditempatkan dengan wajar.

Metodologi yang digunakan untuk menamai subdirektori dari / srv tidak ditentukan karena saat ini tidak ada konsensus tentang bagaimana ini harus dilakukan. Salah satu metode untuk menyusun data di bawah / srv adalah dengan protokol, misalnya. ftp, rsync, www, dan cvs.

Patrick
sumber
7
Errr, intinya /usr/localadalah bahwa hal itu tidak dikelola oleh manajer paket.
derobert
@derobert / usr / local akan banyak digunakan oleh paket pihak ke-3 (paket tidak disediakan oleh repo distro). Ini juga umum bagi perusahaan yang membangun paket mereka sendiri untuk meletakkannya di sana (meskipun itu masih termasuk dalam paket yang tidak disediakan oleh distro). Ini juga didukung oleh FHS, lihat catatan # 27 di bagian paling bawah dari pathname.com/fhs/pub/fhs-2.3.html
Patrick
3
/srv/wwwjuga merupakan jalur klasik pada sistem SuSE (hingga SLES10), juga.
Nils
1
@nils tunggu, mereka sesuai dengan FHS dan kemudian sengaja meninggalkannya ??? desah
Patrick
1
@ Patrick begitu ya - saya cukup heran ketika saya menyadari ini. Mungkin mereka ingin lebih seperti varian Linux lainnya ...
Nils
13

Alasannya sebagian besar historis, seperti yang dikatakan orang lain. /vartelah digunakan untuk data sistem yang berubah sepanjang waktu, misalnya file cache, log, data runtime (file kunci, misalnya), penyimpanan server mail, spooling printer, dll. Pada dasarnya untuk semua hal yang tidak dapat dimasukkan ke dalam /usr( karena ini berisi data lokal), bukan program pihak ketiga yang masuk /opt, dan tidak dapat dibuang serta mudah berubah karena masuk /tmp.

Ketika Unix / Linux berkembang, ia menjadi tempat yang berantakan dengan kumpulan direktori berbeda yang disatukan. Ada kecenderungan dalam beberapa tahun terakhir untuk memindahkan beberapa hal keluar dari sana, terutama konten yang dilayani oleh mesin (yang sekarang sesuai [ Filesystem Hierarchy Standard 2.3, hal.15 ] harus masuk /srv, bukan masuk /var/www).

Hal serupa terjadi pada /var/runbeberapa tahun yang lalu - dengan upaya terkonsentrasi dari beberapa distribusi, itu dipindahkan dari /var/rundalam /runyang menyatu bersama-sama fungsi yang digunakan sebelumnya /var/lock, /var/rundan /dev/shm.

mindcorrosive
sumber
6

Dari pengalaman saya (saya adalah pengembang web) konten situs web jauh dari stabil. Bahkan dalam kasus file html (konten Nevermind dihasilkan secara dinamis) mereka dapat mengalami perubahan konstan (amandemen, kelalaian, dll).

Jadi dari sudut pandang saya, mereka adalah variabel. Dengan demikian, mereka sangat cocok di direktori / var dan tidak ada yang salah dengan itu.

akond
sumber
6
Saya tidak akan setuju. Saya masih tidak melihat file HTML sebagai "terus berubah". Perubahan yang dilakukan pada mereka disengaja dan idealnya akan diperiksa ke dalam revisi-kontrol untuk pelacakan perubahan.
Jonallard
2
Perubahan ke database Mysql juga disengaja, namun file database terletak di / var / db. Tidak mengganggu anda
akond
5
Tentu saja, tapi saya berpendapat bahwa pada kontinum dari variabel ke konstan, DB akan lebih bervariasi daripada HTML / apa pun / aplikasi web, karena ada lebih sedikit versi halaman web daripada database. Halaman-halaman memiliki versi yang relatif sedikit berbeda, saya tidak akan memasukkan /var. Tapi saya pikir ini masalah opini dan debat daripada fakta sulit.
Jonallard
1
Apa yang akan Anda katakan jika saya tunjukkan database yang belum diubah selama dua tahun?
akond
2
Dengan argumen yang diberikan di sini, direktori home termasuk dalam / var. Dalam hal ini, begitu juga dengan / usr karena itu akan diperbarui secara konstan untuk tambalan keamanan, dll. / Var adalah untuk file yang "sering" berubah, yang memungkinkan seseorang untuk memasang sistem file yang dioptimalkan untuk penulisan file kecil yang berat. Mengargumentasikan bahwa database tidak termasuk dalam / var tidak memperkuat kasus yang dimiliki situs web, itu benar-benar membuat kasus bahwa mereka tidak. Situs-situs web banyak dibaca dan tidak mendapat manfaat dari berada di / var, dan sebenarnya dapat memperlambat proses sistem penting seperti pencatatan dan email.
Duncan
6

IIRC, di masa lalu, kami selalu dipasang /varsebagai sistem file sendiri (disk terpisah atau potongan disk).

Salah satu alasan untuk ini, seperti yang telah dinyatakan orang lain, adalah bahwa ada banyak pembacaan / penulisan ke sistem file itu (log / et al). Memiliki disk / slice yang terpisah berarti dapat lebih baik disetel untuk jenis I / O (versus sebagian besar membaca /, /usr, dll ...).

Alasan lainnya adalah bahwa pada masa itu, jika sistem Anda macet selama operasi penulisan, ada kemungkinan sangat besar bahwa sistem file root Anda bisa rusak meninggalkannya dalam keadaan sulit untuk diperbaiki. Dengan demikian perlunya pemisahan dari /.

Filesystem & teknologi disk telah sangat meningkat dari waktu ke waktu, jadi ini adalah kejadian yang sangat kecil kemungkinannya.

Brian
sumber
1
/ var sebagai partisi terpisah masih merupakan praktik yang baik jika Anda tidak ingin menjatuhkan mesin Anda ketika log Anda menjadi liar, karena / sedang penuh
Duncan
3

/var adalah pilihan yang layak untuk lokasi "basis" netral pengguna untuk akses multi-pengguna, jika Anda memiliki situs web dengan beberapa host virtual yang menjalankan FTP atau unggahan lainnya, yaitu jika Anda hosting atau serupa.

/homeini mungkin tidak optimal karena hal-hal buruk bisa terjadi pada account shell pengguna lain jika membabi buta atau berbahaya upload pengguna ke /homebatas partisi (dengan asumsi pengaturan tradisional /var, /home, dll berada di partisi terpisah) dapat mempengaruhi user yang lain.

Tentu saja saya pikir /srvlebih baik untuk ini tetapi /varsudah ada lebih lama dalam tradisi UNIX.

LawrenceC
sumber
Distribusi dan paket yang didistribusikan harus mematuhi FHS. "Pengguna" akhir (sysadmin jika servernya) dapat melakukan apa yang diinginkan dan menempatkan situs web di mana pun. Saya telah meletakkan situs web di / home / pub atau / home / web sejak sebelum / srv. Tetapi jika saya mendistribusikan proyek perangkat lunak server web hari ini, / srv / www atau apa pun yang dikatakan FHS akan menjadi default, meskipun admin dapat mengubahnya.
Skaperen
@ultrasawblade, Kenapa tidak /home/http?
Pacerier
1

Yang ingin saya tambahkan di sini adalah bahwa meletakkan "root" web di / usr bertentangan dengan bagian FHS yang mengindikasikan / usr sebagai hanya dapat dibagikan dan hanya dibaca, karena server web berbeda, bahkan pada "cluster" yang sama dapat memiliki file berbeda yang berisi konfigurasi berbeda, dan ini tidak membuatnya ideal untuk / usr.

Selain itu, beberapa aplikasi web (MediaWiki dan PhpBB untuk memberi nama yang di atas kepala saya) mengharapkan lokasi yang dapat ditulisi di bawah pohon direktori web untuk lampiran / upload file media. Jadi meletakkan pohon web di bawah / usr akan bertentangan jika Anda ingin mematuhi definisi read-only / usr.

Didi Kohen
sumber
1

Server web Apache memiliki situs web standar di bawah / var / www / tetapi menyarankan untuk menempatkan situs web lain di bawah / srv /

Saya perhatikan ini di Ubuntu Server 14.04 LTS. File apache2.conf default-nya berisi blok komentar:

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