为什么默认情况下将Web服务器上的根目录放在“ / var / www”中?


87

Tuxfiles对Linux目录结构说了以下几点:

/var

该目录包含可变数据,该可变数据在系统运行时会不断变化。

FHS/var表示以下内容:

/var包含可变数据文件。这包括假脱机目录和文件,管理和日志记录数据以及临时和临时文件。

然后,他们继续说诸如日志,邮件和后台打印程序之类的内容都放在该文件夹中。

传统上,在Ubuntu Linux上进行Apache或Nginx的常规安装会将目录放置在/var/www/

在我看来,这不是放置目录的理想位置,文件或内容应该是永久的。

为什么如此频繁地放入/var

从主观上来说,根据目录结构,这是理想的位置吗?


2
这是一个很好的问题,我也经常问自己,并以某种方式安排它:)。

1
根据FHS,/var/lib/www本来会更合适...
Nils 2012年

3
当前的FHS说Web服务器根目录应该在下面/srv
LogicDaemon

1
/var适用于不可编辑的非配置非真实用户拥有的数据,这些数据可以被编辑或更改(例如,应存在于可重写卷中)。 /var/lib是专门用于该类型应该生存重启,而不是数据的由维护处理被删除,isc-dhcp-server使用/var/lib来存储它的DHCP的记录租赁例如。因此,这将是Web服务器文件的逻辑点。
劳伦斯C

@Nils,为什么要lib?
佩里耶

Answers:


35

实际上,它根本不是“传统”位置。传统上,在操作系统进入后安装的任何东西/usr/local,实际上就是今天的“经典Apache路径布局”(用他们的话)。很长一段时间是/home/httpd

您将看到为特定操作系统配置的Apache(无论是Red Hat Linux,Mac OS X,GNU等)将自定义位置。Apache的源代码是为此而精心设计的,实际上,如果您在源文件中跟踪ServerRoot的值,则会发现它始于该文件config.layout

该文件的一些摘录将向您显示docroot位置有很多变化。

IIRC /var/www在2000-2001年发行的Red Hat Linux 7.x(不是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,Web服务器数据应转到/srv。这是主要规则。

但是,它也表示,确定的结构/srv是本地管理员的唯一责任!因此,程序包不得将任何内容放入/srv,并且默认文档根目录不得为/srv,因为(apache)程序包不知道其内部/srv和下方。可能是具有明文密码和其他内容的Subversion存储库。因此,必须在之外有一个默认值/srv。该默认值变为/var/www

/var/www主要是占位符。包/usr/share用于静态HTML内容或/var/lib动态变量内容。许多人错误地认为应该将HTML放入/var/www。这是一个问题,因为软件包有时也会使用它。因此,最近他们发明/var/www/html了包装。希望人们不会开始使用它,因为那样的话,他们又必须创建一个新目录……等等。

简介:您应该相应地使用/srv和配置Apache虚拟主机。


5
这个答案真的很有价值。“希望人们不会开始使用它,因为那样的话,他们又不得不发明一个新目录……等等。” 表明许多管理员应该花时间阅读一些基础知识。(就像我现在正在做的一样;))
Toastgeraet

这在Ubuntu版本中已经发生。apache文档根目录默认为/ var / www / html,我在某处读到,更改的原因是它更安全。我不知道我该不该竞争。我可以告诉你,我实际上不会使用该路径。并将继续使用我已经使用一段时间的设置。我在/ websites中专门为虚拟主机安装了磁盘。我保持与cpanel托管类似的结构,并从/ websites / vhostname / public_html提供服务。通过这种方式,我可以使用虚拟主机来保存邮件或特定虚拟主机的任何内容。
克里斯

我实际上是在考虑对磁盘进行分区并将分区安装到单个虚拟主机备份的虚拟主机目录中。这将使我在每个虚拟主机中都拥有/ websites / vhost / backup(我运行了几个,以后可能还会运行更多)
克里斯(Chris

24

虽然我同意akond的回答,但我认为它还有一个更重要的方面。大多数其他位置(例如/usr/local)通常由系统(程序包管理器)管理。/var通常是不由软件包管理器管理的文件所在的位置(系统范围的“数据”)。

我也认为FHS的定义较为准确(数据不必“不断变化”):

/ var包含可变数据文件。这包括假脱机目录和文件,管理和日志记录数据以及临时和临时文件。


但是,FHS也认为www数据应纳入/srv

/ srv包含此系统提供的特定于站点的数据。

指定它的主要目的是使用户可以找到特定服务的数据文件的位置,并可以合理地放置需要单个树的只读数据,可写数据和脚本(例如cgi脚本)的服务。

未指定用于命名/ srv子目录的方法,因为目前尚无关于应如何实现的共识。在/ srv下构造数据的一种方法是通过协议,例如。ftp,rsync,www和cvs。


7
错误,其全部要点/usr/local是它不是由程序包管理器管理的。
derobert 2012年

@derobert / usr / local被第三方软件包(发行版的repo未提供的软件包)使用很多。创建自己的软件包以将其放入其中的公司也很常见(尽管仍然属于发行版未提供的软件包)。这也受到FHS的支持,请参阅pathname.com/fhs/pub/fhs-2.3.html的
Patrick

3
/srv/www这也是SuSE系统(直至SLES10)上的经典之路。
尼尔斯2012年

1
@nils等待,他们符合FHS,然后故意离开了它???感叹
Patrick

1
@Patrick就是这样-当我意识到这一点时,我非常惊讶。可能他们想更像其他Linux变体...
Nils 2012年

13

正如其他人所说,原因主要是历史原因。/var已用于一直更改的系统数据,例如缓存文件,日志,运行时数据(例如锁定文件),邮件服务器存储,打印机假脱机等。基本上,所有不能放入的内容/usr( (因为它包含本地数据),不是进入的第三方程序/opt,并且在进入这些程序时不可丢弃且易失/tmp

随着Unix / Linux的发展,它变得杂乱无章,杂乱无章地摆放着各种不同的目录。近年来,有一种趋势是将某些内容移到那里,尤其是机器提供的内容(现在,根据[ Filesystem Hierarchy Standard 2.3,p.15 ]应该放进/srv,而不是放进/var/www)。

类似的事情也发生在/var/run几年前-几个分布的集中精力,它是从移动/var/run/run其融合在一起先前使用的功能/var/lock/var/run/dev/shm


6

根据我的经验(我是一名Web开发人员),网站内容远远不稳定。即使是html文件(不要介意动态生成的内容),它们也会不断变化(修改,遗漏等)。

因此,从我的角度来看,它们是变量。因此,它们非常适合/ var目录,并且没有任何问题。


6
我不同意。我仍然没有看到HTML文件“不断变化”。对它们所做的更改是有意进行的,理想情况下应将其检查到修订控件中以进行更改跟踪。
jonallard

2
对Mysql数据库的更改也是有意的,但数据库文件位于/ var / db中。不打扰你吗?
2012年

5
当然可以,但是我认为在从变量到常量的连续性上,数据库比HTML / whatever / web应用程序具有更多的可变性,因为网页的版本比数据库的版本少。这些页面具有相对较少的不同版本,我不会放在/var。但我认为这是见解和辩论,而不是硬事实。
jonallard

1
如果我向您显示两年未更改的数据库,您会怎么说?
2012年

2
通过此处给出的参数,主目录属于/ var。为此,/ usr也是如此,因为针对安全修补程序等会不断对其进行更新。/var是针对“频繁”更改的文件的,这使得人们可以安装针对大量小文件写入而优化的文件系统。争论数据库不属于/ var并不能证明网站确实属于这种情况,这确实说明了它们不属于网站。网站阅读量大,使用/ var毫无益处,并且实际上可能会减慢日志和电子邮件等基本系统进程的速度。
邓肯

6

IIRC,在过去,我们总是/var以它自己的文件系统(独立磁盘或磁盘片)挂载。

正如其他人所述,这样做的原因之一是对该文件系统的大量读/写操作(日志/等)。拥有一个单独的磁盘/片意味着它可以更好地调整这种类型的I / O(相对于大多阅读//usr等...)。

另一个原因是那时候,如果您的系统在写操作期间崩溃,那么您的根文件系统很有可能会损坏,从而使其处于难以修复的状态。因此需要与/

随着时间的推移,文件系统和磁盘技术得到了极大的改进,因此发生这种情况的可能性很小。


1
/ var当成一个单独的分区仍然是很好的做法,如果你不想打倒你的机器时,你的日志去野外,由于/充满
邓肯

3

/var 如果您有一个网站运行着多个允许FTP或其他上传的虚拟主机的网站(即,如果您是Web主机或类似的网站),那么对于用户中立的“基本”位置进行多用户访问是一个不错的选择。

/home可能是不是最优的,因为糟糕的事情会发生在其他用户的shell账号,如果不假思索或恶意用户上传到/home分区的限制(假设的传统设置/var/home等是在不同的分区),它可能会影响其他用户帐户。

当然,我认为这样/srv做更好,但是/var在UNIX传统中已经存在了更长的时间。


分发和分发的软件包应遵守FHS。最终的“用户”(如果是服务器,则为sysadmin)可以随心所欲地放置网站。自从存在/ srv以来,我一直将网站放在/ home / pub或/ home / web中。但是,如果我今天要分发一个Web服务器软件项目,则/ srv / www或FHS所说的都是默认的,尽管管理员可以更改它。
Skaperen 2012年

@ultrasawblade,为什么不/home/http呢?
Pacerier,2015年

1

我想在此处添加的内容是,将Web“根”放入/ usr会与FHS中指示/ usr为可共享且只读的部分相冲突,因为即使是同一“集群”上的Web服务器也不同可以具有包含不同配置的不同文件,这并不适合/ usr。

此外,某些Web应用程序(MediaWiki和PhpBB不在我的脑海中而得名)期望在Web目录树下可写的位置用于附件/媒体文件的上载。因此,如果您希望遵守只读的/ usr定义,则将Web树放在/ usr下会发生冲突。


1

Apache Web服务器在/ var / www /下有默认网站,但建议将其他网站放在/ srv /下。

我在Ubuntu Server 14.04 LTS上注意到了这一点。它的默认apache2.conf文件包含注释块:

#<Directory /srv/>
#   Options Indexes FollowSymLinks
#   AllowOverride None
#   Require all granted
#</Directory>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.