Tại sao thư mục gốc trên máy chủ web được đặt theo mặc định trong Trò chơi / var / www?


87

Tuxfiles nói như sau về cấu trúc thư mục Linux:

/var:

Thư mục này chứa dữ liệu biến thay đổi liên tục khi hệ thống đang chạy.

FHS/var nói như sau:

/varchứa các tệp dữ liệu biến. Điều này bao gồm các thư mục và tệp đệm, dữ liệu quản trị và ghi nhật ký, và các tệp tạm thời và tạm thời.

Sau đó, họ tiếp tục nói rằng những thứ như nhật ký, thư và bộ đệm được đặt trong thư mục đó.

Theo truyền thống, bản cài đặt Apache hoặc Nginx trên Ubuntu Linux sẽ đặt thư mục tại /var/www/.

Tôi dường như không phải là nơi lý tưởng để đặt một thư mục chứa các tệp hoặc nội dung được cho là gần như vĩnh viễn.

Tại sao nó thường được đưa vào /var?

Chủ quan hơn, đây có phải là nơi lý tưởng nên đi, theo cấu trúc thư mục?


2
Đây là một câu hỏi hay mà tôi cũng thường tự hỏi mình và sắp xếp với nó bằng cách nào đó :).
sói

1
Theo FHS /var/lib/wwwsẽ phù hợp hơn ...
Nils

3
FHS hiện tại cho biết root máy chủ web phải ở đâu đó bên dưới/srv
LogicDaemon

1
/vardành cho dữ liệu không thể cấu hình không thuộc sở hữu của người dùng thực có thể được chỉnh sửa hoặc thay đổi (ví dụ: phải nằm trên một ổ đĩa có thể ghi lại). /var/libđặc biệt dành cho loại dữ liệu đó sẽ tồn tại trong quá trình khởi động lại và không bị xóa bởi quy trình bảo trì, isc-dhcp-serversử dụng /var/libđể lưu trữ bản ghi DHCP thuê của nó chẳng hạn. Vì vậy, nó sẽ là một điểm hợp lý cho các tập tin máy chủ web.
LawrenceC

@Nils, Tại sao lib?
Pacerier

Câu trả lời:


35

Đó thực sự không phải là vị trí "truyền thống". Theo truyền thống, bất cứ điều gì bạn cài đặt sau khi HĐH đi vào /usr/localvà thực sự đó là "Bố cục đường dẫn Apache cổ điển" (từ của họ) cho đến ngày nay. Trong một thời gian dài, nó đã được /home/httpd.

Những gì bạn đang thấy là một Apache đã được cấu hình cho một HĐH cụ thể - cho dù đó là Red Hat Linux, Mac OS X, GNU, v.v. - sẽ tùy chỉnh vị trí. Nguồn của Apache được thiết kế tốt cho việc này, trên thực tế nếu bạn theo dõi giá trị của ServerRoot trong các tệp nguồn, bạn sẽ thấy rằng nó bắt đầu trong tệp này , config.layout:

Một số trích đoạn từ tệp đó sẽ cho bạn thấy rằng có rất nhiều sự đa dạng trong vị trí docroot.

IIRC, /var/wwwđi vào cuộc sống của tôi với các phiên bản 2000-2001 của Red Hat Linux 7.x (không phải Red Hat Enterprise Linux). Đối với tất cả các lý do bạn trích dẫn ở trên, tôi nghĩ rằng nó không có ý nghĩa lớn - nhưng thực tế là trong thời kỳ hiện đại, rất nhiều công cụ và công nghệ khác có liên quan đến việc di chuyển vị trí.

#   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

Cách sử dụng /var/wwwlà khó hiểu chỉ từ cái nhìn đầu tiên.

Theo FHS, dữ liệu máy chủ web nên đi đến /srv. Đó là quy tắc chính.

Tuy nhiên, nó cũng nói rằng quyết định về cấu trúc /srvlà trách nhiệm duy nhất của quản trị viên địa phương! Do đó, các gói không được đặt bất cứ thứ gì vào /srv, và gốc tài liệu mặc định không được /srv, bởi vì gói (apache) không biết cái gì ở trong /srvvà bên dưới nó. Có thể một kho lưu trữ lật đổ với mật khẩu văn bản rõ ràng và những thứ khác là tốt. Vì vậy, phải có một mặc định bên ngoài /srv. Điều đó trở thành mặc định /var/www.

/var/wwwchủ yếu là một giữ chỗ. Các gói sử dụng /usr/sharecho nội dung HTML tĩnh hoặc /var/libcho nội dung biến động. Nhiều người lầm tưởng rằng họ nên đưa HTML vào /var/www. Đó là một vấn đề, bởi vì các gói đôi khi cũng sử dụng điều đó. Vì vậy, gần đây họ đã phát minh ra /var/www/htmlcác gói. Hy vọng mọi người sẽ không bắt đầu sử dụng điều đó bởi vì một lần nữa họ phải phát minh ra một thư mục mới ... vân vân.

Tóm tắt: bạn nên sử dụng /srvvà định cấu hình máy chủ ảo Apache phù hợp.


5
Câu trả lời này thực sự có giá trị. "Hy vọng mọi người sẽ không bắt đầu sử dụng nó bởi vì sau đó một lần nữa họ phải phát minh ra một thư mục mới ... vân vân." Cho thấy nhiều quản trị viên nên dành thời gian và đọc một số điều cơ bản. (giống như tôi đang làm ngay bây giờ;))
Toastgeraet

Điều này đã xảy ra trong các phiên bản Ubuntu. tài liệu gốc apache mặc định là / var / www / html tôi đã đọc ở đâu đó rằng lý do cho sự thay đổi là nó an toàn hơn. Tôi không thể dự thi như tôi không biết. Tôi có thể nói với bạn rằng tôi thực sự sẽ không sử dụng con đường đó. và sẽ tiếp tục với thiết lập mà tôi đã sử dụng trong một thời gian. Tôi gắn một đĩa đặc biệt cho các máy chủ ảo trong / trang web. Tôi giữ một cấu trúc tương tự như lưu trữ cpanel và phục vụ từ / website / vhostname / public_html. Theo cách này tôi có thể sử dụng vhost để giữ thư hoặc bất cứ thứ gì cho vhost cụ thể.
Chris

Tôi thực sự xem xét phân vùng đĩa và gắn các phần vào thư mục vhost để sao lưu vhost riêng lẻ. mà sẽ cung cấp cho tôi / website / vhost / sao lưu trong mỗi vhost (Tôi chạy một số và có thể sẽ chạy nhiều hơn vào một ngày sau đó)
Chris

24

Trong khi tôi đồng ý với câu trả lời của akond, tôi nghĩ có một khía cạnh quan trọng hơn với nó. Hầu hết các vị trí khác (chẳng hạn như /usr/local) thường được quản lý bởi hệ thống (trình quản lý gói). /varthường là nơi các tệp đi mà không được quản lý gói quản lý (toàn bộ dữ liệu 'hệ thống').

Tôi cũng nghĩ định nghĩa từ FHS chính xác hơn một chút (dữ liệu không phải "thay đổi liên tục"):

/ var chứa các tệp dữ liệu biến. Điều này bao gồm các thư mục và tệp đệm, dữ liệu quản trị và ghi nhật ký, và các tệp tạm thời và tạm thời.


Tuy nhiên, FHS cũng phân loại dữ liệu www/srv

/ srv chứa dữ liệu dành riêng cho trang web được phục vụ bởi hệ thống này.

Mục đích chính của việc xác định điều này là để người dùng có thể tìm thấy vị trí của các tệp dữ liệu cho dịch vụ cụ thể và để các dịch vụ yêu cầu một cây cho dữ liệu chỉ đọc, dữ liệu có thể ghi và tập lệnh (như tập lệnh cgi) có thể được đặt một cách hợp lý.

Phương pháp được sử dụng để đặt tên cho các thư mục con của / srv là không xác định vì hiện tại không có sự đồng thuận về cách thực hiện việc này. Một phương pháp để cấu trúc dữ liệu theo / srv là theo giao thức, vd. ftp, rsync, www và cvs.


7
Errr, toàn bộ vấn đề /usr/locallà nó không được quản lý bởi người quản lý gói.
derobert

@derobert / usr / local được sử dụng rất nhiều bởi các gói của bên thứ 3 (các gói không được cung cấp bởi repo của distro). Nó cũng phổ biến đối với các công ty xây dựng các gói riêng của họ để đặt chúng vào đó (mặc dù điều đó vẫn thuộc các gói không được cung cấp bởi distro). Điều này cũng được FHS hỗ trợ, xem ghi chú # 27 ở dưới cùng của pathname.com/fhs/pub/fhs-2.3.html
Patrick

3
/srv/wwwcũng là con đường cổ điển trên SuSE -systems (lên đến SLES10).
Nils

1
@nils chờ đã, họ đã tuân thủ FHS rồi cố tình bỏ nó ??? thở dài
Patrick

1
@Patrick là vậy - Tôi đã rất ngạc nhiên khi nhận ra điều này. Có lẽ họ muốn giống với các biến thể Linux khác ...
Nils

13

Những lý do chủ yếu là lịch sử, như những người khác nói. /varđã được sử dụng cho dữ liệu hệ thống luôn thay đổi, ví dụ: tệp bộ đệm, nhật ký, dữ liệu thời gian chạy (ví dụ: tệp khóa), lưu trữ máy chủ thư, lưu trữ máy in, v.v. Về cơ bản cho tất cả nội dung không thể đưa vào /usr( bởi vì nó chứa dữ liệu cục bộ), không phải là các chương trình của bên thứ ba /opt, và không thể loại bỏ và dễ bay hơi như những chương trình này /tmp.

Khi Unix / Linux phát triển, nó trở thành một nơi lộn xộn với một loạt các thư mục khác nhau được đặt cùng nhau. Trong những năm gần đây đã có xu hướng chuyển một số thứ ra khỏi đó, đặc biệt là nội dung được phục vụ bởi máy (mà bây giờ theo [ Tiêu chuẩn phân cấp hệ thống tập tin 2.3, tr.15 ] nên đi vào /srvchứ không phải trong /var/www).

Điều tương tự xảy ra với /var/runmột vài năm trở lại - với nỗ lực tập trung của nhiều phân phối, nó đã được chuyển từ /var/runthành /runmà hợp nhất với nhau các chức năng của sử dụng trước đó /var/lock, /var/run/dev/shm.


6

Từ kinh nghiệm của tôi (tôi là một nhà phát triển web) nội dung trang web không ổn định. Ngay cả trong trường hợp các tệp html (không bao giờ tạo nội dung được tạo động), chúng vẫn có thể thay đổi liên tục (sửa đổi, thiếu sót, v.v.).

Vì vậy, theo quan điểm của tôi, chúng là các biến. Vì vậy, chúng hoàn toàn phù hợp trong thư mục / var và không có gì sai với điều đó.


6
Tôi sẽ không đồng ý. Tôi vẫn không thấy các tệp HTML là "thay đổi liên tục". Những thay đổi được thực hiện đối với chúng là có chủ ý và lý tưởng sẽ được kiểm tra trong kiểm soát sửa đổi để theo dõi thay đổi.
jonallard

2
Các thay đổi đối với cơ sở dữ liệu Mysql cũng có chủ ý, nhưng các tệp cơ sở dữ liệu được đặt trong / var / db. Không làm phiền bạn?
akond

5
Chắc chắn là có, nhưng tôi sẽ lập luận rằng trên tính liên tục từ biến thành hằng, DB sẽ biến đổi nhiều hơn ứng dụng HTML / anything / web, vì có ít phiên bản của các trang web hơn so với cơ sở dữ liệu. Các trang có tương đối ít phiên bản khác nhau, tôi sẽ không đưa vào /var. Nhưng tôi nghĩ đó là vấn đề quan điểm và tranh luận chứ không phải sự thật phũ phàng.
jonallard

1
Bạn sẽ nói gì nếu tôi chỉ cho bạn một cơ sở dữ liệu không được thay đổi trong hai năm?
akond

2
Theo các đối số được đưa ra ở đây, các thư mục nhà thuộc về / var. Đối với vấn đề đó, / usr cũng vậy vì nó được cập nhật liên tục cho các bản vá bảo mật, v.v. / var dành cho các tệp "thường xuyên" thay đổi, cho phép người ta gắn kết một hệ thống tệp được tối ưu hóa để ghi các tệp nhỏ. Lập luận rằng một cơ sở dữ liệu không thuộc về / var không củng cố trường hợp các trang web làm, nó thực sự làm cho trường hợp mà họ không làm. Các trang web được đọc nhiều và thu được lợi ích từ việc bật / var và thực sự có thể làm chậm các quá trình hệ thống thiết yếu như đăng nhập và email.
Duncan

6

IIRC, vào thời xa xưa, chúng tôi luôn gắn kết /varvới tư cách là hệ thống tập tin riêng (đĩa riêng hoặc lát cắt của đĩa).

Một trong những lý do cho điều này, như những người khác đã tuyên bố, là có việc đọc / ghi nặng vào hệ thống tập tin đó (log / et al). Có một đĩa / phần riêng biệt có nghĩa là nó có thể được điều chỉnh tốt hơn cho loại I / O (so với hầu hết là đọc trên /, /usr, vv ...).

Lý do khác là vào thời đó, nếu hệ thống của bạn gặp sự cố trong quá trình ghi, rất có khả năng hệ thống tập tin gốc của bạn có thể bị hỏng khiến nó ở trạng thái khó sửa chữa. Do đó, cần phải tách từ /.

Hệ thống tập tin & công nghệ đĩa đã được cải thiện rất nhiều theo thời gian, vì vậy đây là điều ít xảy ra hơn.


1
/ var như một phân vùng riêng biệt vẫn là một thực hành tốt nếu bạn không muốn hạ máy xuống khi nhật ký của bạn bị mất, do / bị đầy
Duncan

3

/var là một lựa chọn hợp lý cho vị trí "cơ sở" trung lập với người dùng để truy cập nhiều người dùng, trong trường hợp bạn có một trang web có nhiều máy chủ ảo đang chạy cho phép FTP hoặc tải lên khác, tức là nếu bạn là một webhost hoặc tương tự.

/homecó thể là không tối ưu vì những điều tồi tệ có thể xảy ra với tài khoản người dùng vỏ khác nếu không suy nghĩ hoặc độc hại cập người dùng đến /homegiới hạn phân vùng (giả thiết lập truyền thống của /var, /homevv được trên phân vùng riêng biệt) nó có thể ảnh hưởng đến tài khoản người dùng khác.

Tất nhiên tôi nghĩ /srvlà tốt hơn cho điều này nhưng /varđã tồn tại lâu hơn trong truyền thống UNIX.


Phân phối và gói phân phối phải tuân thủ FHS. "Người dùng" cuối (sysadmin nếu là máy chủ) có thể làm như cô ấy muốn và đặt trang web ở bất cứ đâu. Tôi đã đặt các trang web trong / home / pub hoặc / home / web từ trước khi có / srv. Nhưng nếu tôi phân phối một dự án phần mềm máy chủ web ngày hôm nay, / srv / www hoặc bất cứ điều gì FHS nói sẽ là mặc định, mặc dù quản trị viên có thể thay đổi nó.
Skaperen

@ultrasawblade, Tại sao không /home/http?
Pacerier

1

Điều tôi muốn thêm ở đây là việc đặt "root" web vào / usr xung đột với phần FHS chỉ ra / usr là có thể chia sẻ và chỉ đọc, vì các máy chủ web khác nhau, ngay cả trên cùng một "cụm" có thể có các tệp khác nhau chứa các cấu hình khác nhau và điều này không làm cho nó lý tưởng cho / usr.

Ngoài ra, một số ứng dụng web (MediaWiki và PhpBB để đặt tên cho các ứng dụng trên đỉnh đầu của tôi) mong muốn một vị trí có thể ghi dưới cây thư mục web để tải lên tệp đính kèm / tệp phương tiện. Vì vậy, đặt cây web dưới / usr sẽ xung đột nếu bạn muốn tuân thủ định nghĩa chỉ đọc / usr.


1

Máy chủ web Apache có trang web mặc định theo / var / www / nhưng đề nghị đặt các trang web khác dưới / srv /

Tôi nhận thấy điều này trên Ubuntu Server 14.04 LTS. Tệp apache2.conf mặc định của nó chứa khối nhận xét:

#<Directory /srv/>
#   Options Indexes FollowSymLinks
#   AllowOverride None
#   Require all granted
#</Directory>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.