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

jon*_*ard 102 directory-structure

Tuxfiles关于 Linux 目录结构的说明如下:

/var

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

FHS on/var说以下内容:

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

然后他们继续说日志、邮件和假脱机程序等内容都放在该文件夹中。

传统上,在 Ubuntu Linux 上安装 Apache 或 Nginx 或 Arch 会将目录放在/var/www/.

在我看来,它不是放置包含文件或其他内容的目录的理想位置,这些目录应该是几乎永久的。

为什么这么频繁的投入/var

更主观地,根据目录结构,这是理想的去处吗?

小智 52

的用法/var/www只是乍一看令人困惑。

根据 FHS,Web 服务器数据应转到/srv. 这是主要规则。

但是,它也说决定 的结构/srv是本地管理员的唯一责任!因此包不能放入任何东西/srv默认文件根不能是/srv,因为(apache)包不知道/srv它里面和下面是什么。也许是一个带有明文密码和其他东西的颠覆存储库。所以必须有一个默认值之外的/srv. 那个默认变成/var/www.

/var/www主要是占位符。包/usr/share用于静态 HTML 内容或/var/lib动态变量内容。许多人错误地认为他们应该将 HTML 放入/var/www. 这是一个问题,因为包偶尔也会使用它。所以最近他们发明/var/www/html了包装。希望人们不会开始使用它,因为他们必须再次发明一个新目录......等等。

总结:您应该相应地使用/srv和配置您的 Apache 虚拟主机。

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

ckh*_*han 39

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

您看到的是,已为特定操作系统(无论是 Red Hat Linux、Mac OS X、GNU 等)配置的 Apache 将自定义位置。Apache 的源代码为此设计得很好,事实上,如果您跟踪源文件中 ServerRoot 的值,您会看到它从这个文件开始config.layout

该文件的一些摘录将告诉您 docroot 位置有很多变化。

IIRC,/var/www随着 Red Hat Linux 7.x(不是 Red Hat Enterprise Linux)的 2000-2001 版本进入我的生活。由于您在上面引用的所有原因,我认为这没有多大意义-但现实是,在现代时代,涉及位置移动的其他工具和技术太多了。

#   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
Run Code Online (Sandbox Code Playgroud)


phe*_*mer 27

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

我还认为FHS的定义更准确一些(数据不必“不断变化”):

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


然而,FHS也指出 www 数据应该进入/srv

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

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

用于命名 /srv 的子目录的方法未指定,因为目前尚未就如何完成此操作达成共识。在 /srv 下构造数据的一种方法是通过协议,例如。ftp、rsync、www 和 cvs。

  • 呃,`/usr/local` 的重点是它*不*由包管理器管理。 (7认同)
  • `/srv/www` 也是 **SuSE** 系统(最高 SLES10)上的经典路径。 (3认同)

min*_*ive 13

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

随着 Unix/Linux 的发展,它变成了杂乱无章的地方,各种不同的目录放在一起。近年来,有一种趋势是将某些东西移出那里,尤其是机器提供的内容(现在按照 [文件系统层次结构标准 2.3,第 15 页] 应该放入/srv,而不是放入/var/www)。

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


ako*_*ond 6

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

所以在我看来,它们是变量。因此,它们非常适合在 /var 目录中,并且没有任何问题。

  • 我不同意。我仍然没有将 HTML 文件视为“不断变化”。对它们所做的更改是经过深思熟虑的,理想情况下会检查到修订控制以进行更改跟踪。 (6认同)
  • 当然可以,但我认为在从变量到常量的连续体中,数据库将比 HTML/whatever/web 应用程序更具可变性,因为网页版本比数据库版本少。不同版本相对较少的页面,我不会放入`/var`。但我认为这是一个意见和辩论的问题,而不是确凿的事实。 (5认同)
  • 对 Mysql 数据库的更改也是经过深思熟虑的,但数据库文件位于 /var/db 中。不打扰你吗? (2认同)
  • 根据此处给出的参数,主目录属于 /var。就此而言, /usr 也是如此,因为它会不断更新以获取安全补丁等。 /var 用于“经常”更改的文件,它允许安装一个针对小文件大量写入而优化的文件系统。争论一个数据库不属于 /var 并不能加强网站的情况,它确实说明了他们不属于的情况。网站需要大量阅读,并且使用 /var 没有任何好处,而且实际上可能会减慢重要的系统进程,例如日志记录和电子邮件。 (2认同)

Bri*_*ian 6

IIRC,在过去,我们总是将其安装/var为自己的文件系统(单独的磁盘或磁盘片)。

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

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

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

  • 如果您不想在日志因 / 已满而变得疯狂时关闭计算机,那么将 /var 作为单独的分区仍然是一个很好的做法 (2认同)