ทำไมไดเรกทอรีรากบนเว็บเซิร์ฟเวอร์จึงถูกตั้งเป็นค่าเริ่มต้นใน“ / var / www”


87

Tuxfilesกล่าวว่าเกี่ยวกับโครงสร้างไดเรกทอรี Linux:

/var:

ไดเรกทอรีนี้มีข้อมูลตัวแปรที่เปลี่ยนแปลงอย่างต่อเนื่องเมื่อระบบกำลังทำงาน

FHS บน/varพูดว่าต่อไปนี้:

/varมีไฟล์ข้อมูลตัวแปร ซึ่งรวมถึงไดเรกทอรีและไฟล์สปูลข้อมูลการดูแลระบบและการบันทึกและไฟล์ชั่วคราวและชั่วคราว

จากนั้นพวกเขาก็จะบอกว่าสิ่งต่าง ๆ เช่นบันทึกจดหมายและตัวจัดคิวจะถูกวางไว้ในโฟลเดอร์นั้น

ประเพณีการติดตั้งสต็อกของ Apache หรือ Nginx บน Ubuntu Linux /var/www/จะวางไดเรกทอรีที่

ฉันไม่ชอบสถานที่ที่เหมาะในการวางไดเรกทอรีพร้อมไฟล์หรือเนื้อหาที่ควรจะเกือบจะถาวร

ทำไมจึงใส่บ่อย/var?

มันเป็นสิ่งที่ควรจะเป็นไปตามหลักคำสอนหรือไม่?


2
นี่เป็นคำถามที่ดีที่ฉันถามตัวเองบ่อยเกินไปและจัดการกับมันอย่างใด :)
wolf

1
ตาม FHS /var/lib/wwwจะมีความเหมาะสมมากขึ้น ...
นิลส์

3
FHS ปัจจุบันกล่าวว่าเว็บเซิร์ฟเวอร์รูทควรอยู่ที่ใดที่หนึ่งด้านล่าง/srv
LogicDaemon

1
/varมีไว้สำหรับข้อมูลที่ไม่สามารถเรียกใช้งานได้ซึ่งไม่สามารถเรียกใช้งานได้ซึ่งไม่ใช่ข้อมูลที่เป็นของผู้ใช้จริงซึ่งสามารถแก้ไขหรือเปลี่ยนแปลงได้ (เช่นควรมีชีวิตอยู่ในปริมาณที่เขียนซ้ำได้) /var/libใช้สำหรับข้อมูลประเภทนั้นโดยเฉพาะที่ควรอยู่รอดในการรีบูตและไม่ถูกลบโดยกระบวนการบำรุงรักษาisc-dhcp-serverใช้/var/libในการจัดเก็บบันทึกการเช่า DHCP เช่น ดังนั้นมันจะเป็นจุดที่เหมาะสมสำหรับไฟล์เว็บเซิร์ฟเวอร์
LawrenceC

@ นิลทำไม lib?
Pacerier

คำตอบ:


35

จริงๆแล้วมันไม่ใช่ตำแหน่ง "ดั้งเดิม" เลย ตามเนื้อผ้าทุกสิ่งที่คุณติดตั้งหลังจากที่ระบบปฏิบัติการเข้าไป/usr/localและแน่นอนว่า "รูปแบบเส้นทาง Apache คลาสสิก" (คำพูดของพวกเขา) จนถึงทุกวันนี้ /home/httpdเป็นเวลานานก็คือ

สิ่งที่คุณเห็นคือ Apache ที่ได้รับการกำหนดค่าสำหรับระบบปฏิบัติการเฉพาะ - ไม่ว่าจะเป็น Red Hat Linux, Mac OS X, GNU ฯลฯ จะปรับแต่งตำแหน่ง แหล่งที่มาของ Apache ออกแบบมาอย่างดีสำหรับเรื่องนี้ในความเป็นจริงถ้าคุณติดตามค่าสำหรับ ServerRoot ในไฟล์ต้นฉบับคุณจะเห็นว่ามันเริ่มต้นในไฟล์นี้config.layout:

ข้อความที่ตัดตอนมาบางส่วนจากไฟล์นั้นจะแสดงให้คุณเห็นว่ามีความหลากหลายในตำแหน่ง docroot

IIRC /var/wwwเข้ามาในชีวิตของฉันด้วย Red Hat Linux 7.x 2000-2001 (ไม่ใช่ Red Hat Enterprise Linux) ด้วยเหตุผลทั้งหมดที่คุณอ้างถึงข้างต้นฉันคิดว่ามันไม่สมเหตุสมผลนัก - แต่ความจริงก็คือในยุคสมัยใหม่เครื่องมือและเทคโนโลยีอื่น ๆ อีกมากมายที่เกี่ยวข้องกับการเคลื่อนย้ายตำแหน่ง

#   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 /srvข้อมูลเว็บเซิร์ฟเวอร์ควรจะไป นั่นคือกฎหลัก

อย่างไรก็ตามมันก็บอกว่าการตัดสินใจเกี่ยวกับโครงสร้างของ/srvเป็นความรับผิดชอบ แต่เพียงผู้เดียวของผู้ดูแลระบบในท้องถิ่น! ดังนั้นแพ็กเกจจะต้องไม่ใส่อะไรลงไป/srvและรูทของเอกสารเริ่มต้นจะต้องไม่เป็น/srvเพราะแพ็คเกจ (apache) ไม่ทราบว่ามีอะไรอยู่ใน/srvและข้างล่าง อาจเป็นพื้นที่เก็บข้อมูลการโค่นล้มด้วยรหัสผ่านข้อความที่ชัดเจนและสิ่งอื่น ๆ เช่นกัน /srvดังนั้นจะต้องมีการเริ่มต้นที่ด้านนอกของ /var/wwwเริ่มต้นที่จะกลายเป็น

/var/wwwส่วนใหญ่เป็นตัวยึดตำแหน่ง แพ็คเกจใช้/usr/shareสำหรับเนื้อหา HTML แบบคงที่หรือ/var/libสำหรับเนื้อหาตัวแปรแบบไดนามิก /var/wwwหลายคนเข้าใจผิดคิดว่าพวกเขาก็ควรใส่ลงใน HTML นั่นเป็นปัญหาเพราะบางครั้งแพ็คเกจก็ใช้เช่นกัน ดังนั้นเมื่อเร็ว ๆ นี้พวกเขาคิดค้น/var/www/htmlแพ็คเกจ หวังว่าผู้คนจะไม่เริ่มใช้สิ่งนั้นเพราะหลังจากนั้นพวกเขาต้องประดิษฐ์ไดเรกทอรีใหม่ ... และอื่น ๆ

สรุป: คุณควรใช้/srvและกำหนดค่าโฮสต์เสมือน Apache ของคุณตามลำดับ


5
คำตอบนี้มีค่าจริงๆ "หวังว่าผู้คนจะไม่เริ่มใช้สิ่งนั้นเพราะหลังจากนั้นพวกเขาต้องประดิษฐ์ไดเรกทอรีใหม่ ... และอื่น ๆ " แสดงให้เห็นว่าผู้ดูแลระบบจำนวนมากควรใช้เวลาและอ่านข้อมูลพื้นฐานบางอย่าง (เหมือนที่ฉันกำลังทำอยู่ตอนนี้))
Toastgeraet

สิ่งนี้เกิดขึ้นแล้วในเวอร์ชัน Ubuntu รากของเอกสาร apache เริ่มต้นที่ / var / www / html ฉันอ่านที่ไหนสักแห่งว่าเหตุผลของการเปลี่ยนแปลงคือความปลอดภัยมากขึ้น ฉันไม่สามารถแข่งขันกับสิ่งที่ฉันไม่รู้ ฉันสามารถบอกคุณได้ว่าฉันไม่ได้ใช้เส้นทางนั้นจริงๆ และจะดำเนินการตั้งค่าต่อไปที่ฉันได้ใช้เป็นระยะเวลาหนึ่ง ฉันติดตั้งดิสก์โดยเฉพาะสำหรับโฮสต์เสมือนใน / เว็บไซต์ ฉันมีโครงสร้างที่คล้ายกับ cpanel โฮสติ้งและให้บริการจาก / เว็บไซต์ / vhostname / public_html ด้วยวิธีนี้ฉันสามารถใช้ vhost เพื่อเก็บเมลหรืออะไรก็ตามสำหรับ vhost ที่เจาะจง
คริส

ฉันกำลังพิจารณาแบ่งพาร์ติชันดิสก์และติดตั้งพาร์ทิชันในไดเรกทอรี vhost สำหรับการสำรองข้อมูล vhost แต่ละรายการ ซึ่งจะให้ฉัน / เว็บไซต์ / vhost / สำรองข้อมูลในแต่ละ vhost (ฉันเรียกใช้ไม่กี่และอาจจะทำงานได้มากขึ้นในภายหลัง)
Chris Chris

24

แม้ว่าฉันจะเห็นด้วยกับคำตอบของ Akond แต่ฉันคิดว่ามันมีความสำคัญมากกว่า /usr/localโดยทั่วไปแล้วตำแหน่งอื่น ๆ (เช่น) จะได้รับการจัดการโดยระบบ (ผู้จัดการแพ็กเกจ) /varมักจะเป็นที่ที่ไฟล์ไปที่ไม่ได้รับการจัดการโดยตัวจัดการแพคเกจ (ระบบกว้าง 'ข้อมูล')

ฉันยังคิดว่าคำนิยามจากFHSนั้นมีความแม่นยำมากกว่าเดิมเล็กน้อย (ข้อมูลไม่จำเป็นต้อง "เปลี่ยนแปลงตลอดเวลา"):

/ var มีไฟล์ข้อมูลตัวแปร ซึ่งรวมถึงไดเรกทอรีและไฟล์สปูลข้อมูลการดูแลระบบและการบันทึกและไฟล์ชั่วคราวและชั่วคราว


อย่างไรก็ตามFHSยังระบุว่าข้อมูล www ควรเข้าสู่/srv

/ srv มีข้อมูลเฉพาะไซต์ที่ให้บริการโดยระบบนี้

วัตถุประสงค์หลักของการระบุสิ่งนี้คือเพื่อให้ผู้ใช้สามารถค้นหาตำแหน่งของไฟล์ข้อมูลสำหรับบริการเฉพาะและเพื่อให้บริการที่ต้องการต้นไม้ต้นเดียวสำหรับข้อมูลที่อ่านได้อย่างเดียวข้อมูลที่เขียนได้และสคริปต์ (เช่นสคริปต์ CGI) สามารถวางได้อย่างสมเหตุสมผล

วิธีการที่ใช้ในการตั้งชื่อไดเรกทอรีย่อยของ / srv ไม่ได้รับการระบุเนื่องจากขณะนี้ยังไม่มีฉันทามติว่าจะทำอย่างไร วิธีหนึ่งสำหรับการจัดโครงสร้างข้อมูลภายใต้ / srv คือโดยโปรโตคอลเช่น ftp, rsync, www และ cvs


7
ข้อผิดพลาดจุดทั้งหมดของ/usr/localคือมันไม่ได้จัดการโดยผู้จัดการแพคเกจ
Derobert

@derobert / usr / local ได้รับใช้มากโดยแพ็คเกจของบุคคลที่สาม (แพ็คเกจที่ไม่ได้จัดทำโดย repo ของ distro) นอกจากนี้ยังเป็นเรื่องธรรมดาสำหรับ บริษัท ที่สร้างแพ็คเกจของตัวเองเพื่อนำมาใส่ในนั้น FHS นี้ได้รับการสนับสนุนเช่นกันดูหมายเหตุ # 27 ที่ด้านล่างสุดของpathname.com/fhs/pub/fhs-2.3.html
Patrick

3
/srv/wwwเป็นเส้นทางแบบคลาสสิกของSuSE -systems (มากถึง SLES10) เช่นกัน
นิลส์

1
@ ไม่มีรอพวกเขาปฏิบัติตาม FHS แล้วจงใจทิ้งไว้ ??? ถอนหายใจ
Patrick

1
@ แพทริคเป็นดังนั้น - ฉันประหลาดใจมากเมื่อฉันตระหนักถึงสิ่งนี้ น่าจะเป็นพวกเขาอยากจะเป็นเหมือนคนอื่น ๆ ลินุกซ์สายพันธุ์ ...
นิลส์

13

เหตุผลส่วนใหญ่เป็นเรื่องทางประวัติศาสตร์ตามที่คนอื่นพูด /varถูกใช้สำหรับข้อมูลระบบที่เปลี่ยนแปลงตลอดเวลาเช่นไฟล์แคชบันทึกข้อมูลรันไทม์ (ล็อกไฟล์เป็นต้น) ที่เก็บเซิร์ฟเวอร์เมลการเก็บพักเครื่องพิมพ์ ฯลฯ โดยทั่วไปสำหรับทุกสิ่งที่ไม่สามารถใส่ได้/usr( เนื่องจากมีข้อมูลในตัวเครื่อง) ไม่ใช่โปรแกรมของบุคคลที่สามที่เข้า/optมาและไม่สามารถทิ้งและระเหยได้เนื่องจากโปรแกรมเหล่านี้เข้า/tmpมา

เมื่อพัฒนา Unix / Linux มันก็กลายเป็นสถานที่ที่ยุ่งเหยิงโดยมี hodge-podge ของไดเรกทอรีที่แตกต่างกันมารวมกัน มีแนวโน้มในปีที่ผ่านมาที่จะย้ายบางสิ่งบางอย่างออกจากที่นั่นเนื้อหาโดยเฉพาะอย่างยิ่งการเสิร์ฟเครื่อง (ซึ่งในขณะนี้เป็นต่อ [ ระบบแฟ้มลำดับชั้นมาตรฐาน 2.3, p.15 ] ควรจะไปใน/srvไม่ได้อยู่ใน/var/www)

สิ่งที่คล้ายกันเกิดขึ้น/var/runไม่กี่ปีหลัง - ที่มีความเข้มข้นของหลายกระจายก็ถูกย้ายจาก/var/runเข้าไป/runที่หลอมรวมกันของฟังก์ชั่นที่ใช้ก่อนหน้านี้/var/lock, และ/var/run/dev/shm


6

จากประสบการณ์ของฉัน (ฉันเป็นนักพัฒนาเว็บ) เนื้อหาของเว็บไซต์อยู่ไกลจากความมั่นคง แม้ในกรณีของไฟล์ html (ไม่เป็นไรเนื้อหาที่สร้างขึ้นแบบไดนามิก) พวกเขาอาจมีการเปลี่ยนแปลงอย่างต่อเนื่อง (การแก้ไขการละเว้น ฯลฯ )

ดังนั้นจากมุมมองของฉันมันเป็นตัวแปร ดังนั้นจึงเหมาะสมอย่างยิ่งในไดเรกทอรี / var และไม่มีอะไรผิดปกติกับสิ่งนั้น


6
ฉันจะไม่เห็นด้วย ฉันยังไม่เห็นไฟล์ HTML ว่า "เปลี่ยนแปลงอยู่ตลอดเวลา" การเปลี่ยนแปลงที่ทำกับพวกเขานั้นเป็นการไตร่ตรองและจะถูกตรวจสอบอย่างสมบูรณ์ในการควบคุมการแก้ไขสำหรับการติดตามการเปลี่ยนแปลง
jonallard

2
การเปลี่ยนแปลงในฐานข้อมูล Mysql ก็มีการพิจารณาเช่นกัน แต่ไฟล์ฐานข้อมูลจะอยู่ใน / var / db ไม่รบกวนคุณหรือ
Akond

5
แน่นอน แต่ฉันจะยืนยันว่าในความต่อเนื่องจากตัวแปรถึงค่าคงที่ DB จะแปรผันมากกว่า HTML / แอปพลิเคชัน / เว็บใด ๆ เนื่องจากมีรุ่นของหน้าเว็บน้อยกว่าที่มีอยู่ของฐานข้อมูล /varหน้าเว็บที่มีรุ่นที่แตกต่างกันค่อนข้างน้อยฉันจะไม่ใส่ใน แต่ฉันคิดว่ามันเป็นเรื่องของความคิดเห็นและการอภิปรายมากกว่าข้อเท็จจริง
Jononard

1
คุณจะว่าอย่างไรถ้าฉันแสดงฐานข้อมูลที่ไม่ได้เปลี่ยนเป็นเวลาสองปี
Akond

2
โดยข้อโต้แย้งที่ได้รับที่นี่ไดเรกทอรีบ้านอยู่ใน / var สำหรับเรื่องนั้นทำเช่นนั้น / usr เพราะได้รับการปรับปรุงอย่างต่อเนื่องสำหรับแพทช์รักษาความปลอดภัย ฯลฯ / var สำหรับไฟล์ที่เปลี่ยน "บ่อย" ซึ่งช่วยให้หนึ่งติดระบบไฟล์ที่เหมาะสำหรับการเขียนหนักของไฟล์ขนาดเล็กหนัก การพิสูจน์ว่าฐานข้อมูลไม่ได้อยู่ใน / var ไม่ได้เสริมความแข็งแกร่งให้กับกรณีที่เว็บไซต์ทำมันทำให้เป็นกรณีที่ไม่เป็นเช่นนั้น เว็บไซต์มีการอ่านจำนวนมากและไม่ได้รับประโยชน์จากการใช้งาน / var และอาจทำให้กระบวนการของระบบที่จำเป็นเช่นการบันทึกและอีเมลช้าลง
ดันแคน

6

IIRC ในสมัยก่อนเราติดตั้งเสมอ/varเพราะเป็นระบบไฟล์ของตัวเอง (แยกดิสก์หรือแยกส่วนของดิสก์)

หนึ่งในเหตุผลนี้สิ่งนี้ตามที่คนอื่นได้กล่าวไว้คือมีการอ่าน / เขียนระบบไฟล์นั้นเป็นจำนวนมาก (logs / et al) มีดิสก์ที่แยกต่างหาก / ชิ้นหมายความว่ามันสามารถปรับดีขึ้นสำหรับประเภทของ I / O นี้ (เทียบกับส่วนใหญ่อ่านบน/, /usrฯลฯ ... )

อีกเหตุผลก็คือในสมัยก่อนถ้าระบบของคุณล้มเหลวในระหว่างการเขียนมีโอกาสที่ดีมากที่ระบบไฟล์รูทของคุณอาจเสียหายได้โดยปล่อยให้มันอยู่ในสถานะที่ยากต่อการซ่อมแซม /ดังนั้นจึงจำเป็นที่จะต้องแยกจาก

เทคโนโลยีระบบแฟ้มและดิสก์ได้รับการปรับปรุงอย่างมากเมื่อเวลาผ่านไปดังนั้นนี่จึงเป็นเหตุการณ์ที่เกิดขึ้นน้อยกว่ามาก


1
/ var เป็นพาร์ติชันที่แยกจากกันยังคงเป็นวิธีปฏิบัติที่ดีถ้าคุณไม่ต้องการที่จะนำเครื่องของคุณลงมาเมื่อบันทึกของคุณทำงานหนักเนื่องจาก / เต็ม
Duncan

3

/var เป็นตัวเลือกที่ดีสำหรับตำแหน่ง "ฐาน" ที่เป็นกลางสำหรับผู้ใช้สำหรับการเข้าถึงผู้ใช้หลายคนในกรณีที่คุณมีเว็บไซต์ที่มีโฮสต์เสมือนหลายเครื่องที่อนุญาตให้ FTP หรือการอัปโหลดอื่น ๆ เช่นหากคุณเป็นเว็บโฮสต์หรือคล้ายกัน

/homeอาจจะไม่เหมาะสมเพราะสิ่งเลวร้ายที่อาจเกิดขึ้นกับบัญชีผู้ใช้เปลือกอื่น ๆ ถ้าไม่เกรงใจหรือเป็นอันตรายผู้ใช้อัปโหลดไปยัง/homeขีด จำกัด ของพาร์ทิชัน (สมมติว่าการติดตั้งแบบดั้งเดิมของ/var, /homeฯลฯ เป็นบนพาร์ติชันที่แยกต่างหาก) ก็สามารถส่งผลกระทบต่อบัญชีผู้ใช้อื่น ๆ

แน่นอนฉันคิดว่า/srvดีกว่าสำหรับเรื่องนี้ แต่/varใช้เวลานานกว่าในประเพณี UNIX


การแจกแจงและแพ็คเกจการแจกจ่ายควรเป็นไปตาม FHS "ผู้ใช้" ปลายทาง (ดูแลระบบหากเซิร์ฟเวอร์) สามารถทำตามที่เธอต้องการและวางเว็บไซต์ได้ทุกที่ ฉันใส่เว็บไซต์ใน / home / pub หรือ / home / web มาตั้งแต่ก่อนหน้านี้ / srv แต่ถ้าฉันจะเผยแพร่โครงการซอฟต์แวร์เว็บเซิร์ฟเวอร์ในวันนี้ / srv / www หรืออะไรก็ตามที่ FHS บอกว่าจะเป็นค่าเริ่มต้นแม้ว่าผู้ดูแลระบบสามารถเปลี่ยนได้
Skaperen

@ultrasawblade ทำไม/home/httpล่ะ?
Pacerier

1

สิ่งที่ฉันต้องการเพิ่มที่นี่คือการวาง "root" ในเว็บ / usr ขัดแย้งกับส่วนของ FHS ที่บ่งชี้ว่า / usr เป็นการแชร์และอ่านได้อย่างเดียวเนื่องจากเว็บเซิร์ฟเวอร์ที่แตกต่างกันแม้แต่ใน "คลัสเตอร์" เดียวกัน สามารถมีไฟล์ต่าง ๆ ที่มีการกำหนดค่าต่างกันและสิ่งนี้ไม่เหมาะสำหรับ / usr

นอกจากนี้บางเว็บแอปพลิเคชั่น (MediaWiki และ PhpBB เพื่อตั้งชื่อคนที่อยู่ด้านบนสุดของหัวของฉัน) คาดว่าตำแหน่งที่สามารถเขียนได้ภายใต้แผนผังไดเรกทอรีเว็บสำหรับการอัปโหลดไฟล์แนบ / ไฟล์มีเดีย ดังนั้นการวางทรีเว็บใน / usr จะขัดแย้งกันหากคุณต้องการที่จะปฏิบัติตามคำจำกัดความของการอ่านอย่างเดียว / usr


1

Apache เว็บเซิร์ฟเวอร์มีเว็บไซต์เริ่มต้นภายใต้/ var / www /แต่แนะนำให้ใส่เว็บไซต์อื่นภายใต้/ 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.