Почему корневой каталог на веб-сервере по умолчанию помещен в «/ var / www»?

87

Tuxfiles говорит следующее о структуре каталогов Linux:

/var:

Этот каталог содержит переменные данные, которые постоянно меняются во время работы системы.

FHS на/var говорит следующее:

/varсодержит переменные файлы данных. Это включает в себя каталоги и файлы спула, административные данные и данные журналов, а также временные и временные файлы.

Затем они говорят, что такие вещи, как журналы, почта и спулер, помещаются в эту папку.

Традиционно При стандартной установке Apache или Nginx в Ubuntu Linux каталог будет размещен по адресу /var/www/.

Мне не кажется идеальным местом для размещения каталога с файлами или другим содержимым, которое должно быть почти постоянным.

Почему это так часто вкладывают в /var?

Если говорить более субъективно, то куда оно должно в идеале идти, в соответствии со структурой каталогов?

jonallard
источник
2
Это хороший вопрос, который я тоже часто задавал себе и как-то договаривался :).
волк
1
По мнению FHS /var/lib/wwwбыло бы более подходящим ...
Нильс
3
текущий FHS говорит, что корень веб-сервера должен быть где-то ниже/srv
LogicDaemon
1
/varпредназначен для неисполняемых неконфигурируемых данных, не принадлежащих реальному пользователю, которые можно редактировать или изменять (например, они должны храниться на перезаписываемом томе). /var/libспециально для того типа данных, который должен пережить перезагрузку и не быть удаленным процессом обслуживания, например, isc-dhcp-serverиспользуется /var/libдля хранения своей записи аренды DHCP. Так что это было бы логичным местом для файлов веб-сервера.
LawrenceC
@ Нильс, почему Либ?
Pacerier

Ответы:

35

Это на самом деле совсем не "традиционное" место. Традиционно все, что вы установили после ОС, вошло /usr/local, и на самом деле это «Классическая схема пути Apache» (их слова) по сей день. Долгое время это было /home/httpd.

То, что вы видите, это то, что Apache, который был настроен для конкретной ОС - будь то Red Hat Linux, Mac OS X, GNU и т. Д. - будет настраивать местоположение. Исходники Apache хорошо спроектированы для этого, фактически, если вы проследите значение ServerRoot в исходных файлах, вы увидите, что оно начинается в этом файле config.layout:

Некоторые выдержки из этого файла покажут вам, что в расположении документа есть много разнообразия.

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
ckhan
источник
33

Использование /var/wwwсмущает только на первый взгляд.

По данным FHS, данные веб-сервера должны отправляться на /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. Я где-то читал, что причиной этого изменения было повышение безопасности. Я не могу оспаривать это, поскольку я не знаю. Я могу сказать вам, что на самом деле я не буду использовать этот путь. и продолжу настройку, которую я использовал некоторое время. Я монтирую диск специально для виртуальных хостов в / sites. Я придерживаюсь той же структуры, что и хостинг cpanel, и работаю с / sites / vhostname / public_html. Таким образом, я могу использовать vhost для хранения почты или чего-то другого для конкретного vhost.
Chris
Я на самом деле рассматриваю разбиение диска и монтирование разделов в каталог vhost для отдельного резервного копирования vhost. что дало бы мне / sites / vhost / backup в каждом vhost (я запускаю несколько и, вероятно, буду запускать больше позже)
Chris
24

Хотя я согласен с ответом Аконда, я думаю, что в нем есть более важный аспект. Большинство других местоположений (таких как /usr/local) обычно управляются системой (диспетчером пакетов). /varобычно это файлы, которые не управляются менеджером пакетов (общесистемные «данные»).

Я также думаю, что определение из FHS немного точнее (данные не должны быть «постоянно меняющимися»):

/ var содержит файлы переменных данных. Это включает в себя каталоги и файлы спула, административные данные и данные журналов, а также временные и временные файлы.


Однако FHS также указывает, что данные WWW должны быть в/srv

/ srv содержит специфичные для сайта данные, которые обслуживаются этой системой.

Эта основная цель определения этого заключается в том, чтобы пользователи могли находить местоположение файлов данных для конкретной службы, и чтобы разумно размещать службы, которым требуется единственное дерево для данных только для чтения, записываемых данных и сценариев (таких как сценарии cgi).

Методология, используемая для именования подкаталогов / srv, не определена, так как в настоящее время нет единого мнения о том, как это сделать. Одним из способов структурирования данных в / srv является протокол, например. ftp, rsync, www и cvs.

Патрик
источник
7
Errr, весь смысл в /usr/localтом, что он не управляется менеджером пакетов.
Дероберт
@derobert / usr / local часто используется сторонними пакетами (пакетами, не предоставляемыми репозиторием дистрибутива). Также компании, которые создают свои собственные пакеты, часто помещают их туда (хотя это все еще относится к пакетам, не предоставленным дистрибутивом). Это также поддерживается FHS, см. Примечание № 27 в самом низу pathname.com/fhs/pub/fhs-2.3.html
Патрик
3
/srv/wwwбыл классический путь на SuSE -системах (до SLES10) тоже.
Нильс
1
@nils подождите, они были совместимы с FHS, а затем намеренно оставили его ??? вздох
Патрик
1
@ Патрик, так оно и есть - я был очень удивлен, когда понял это. Возможно, они хотели больше походить на другие варианты Linux ...
Nils
13

Причины в основном исторические, как говорили другие. /varиспользовался для системных данных, которые постоянно изменяются, например, файлы кэша, журналы, данные времени выполнения (например, файлы блокировки), хранилище почтового сервера, спулинг принтера и т. д. В основном для всего, что не может быть вставлено /usr( потому что он содержит локальные данные), не являются сторонними программами, которые входят /opt, и не являются отбрасываемыми и изменчивыми, поскольку они входят /tmp.

По мере развития Unix / Linux это стало грязным местом с мешаниной различных разнородных каталогов, вместе взятых. Там была тенденция в последние годы , чтобы переместить некоторые вещи там, в частности , содержание служил на машине (которая в настоящее время в соответствии с [ Filesystem Hierarchy Standard 2.3, с.15 ] должны идти в /srv, а не в /var/www).

Подобная вещь произошла с /var/runнесколькими годами назад - благодаря сосредоточенным усилиям нескольких дистрибутивов, она была перемещена, /var/runв /runкоторую соединились функции ранее использовавшихся /var/lock, /var/runи /dev/shm.

mindcorrosive
источник
6

Судя по моему опыту (я веб-разработчик), содержание сайта далеко не стабильно. Даже в случае html-файлов (не говоря уже о динамически генерируемом контенте) они подвержены постоянным изменениям (поправкам, упущениям и т. Д.).

Так что, с моей точки зрения, они являются переменными. Таким образом, они идеально подходят в каталог / var, и в этом нет ничего плохого.

akond
источник
6
Я бы не согласился. Я до сих пор не вижу HTML-файлы как «постоянно меняющиеся». Изменения, внесенные в них, являются преднамеренными и в идеале должны быть проверены в системе контроля версий для отслеживания изменений.
Джоналлард
2
Изменения в базе данных Mysql также являются преднамеренными, однако файлы базы данных находятся в / var / db. Вас не беспокоит?
Akond
5
Конечно, но я бы поспорил, что в континууме от переменной к константе БД будет более изменчивой, чем приложение HTML / безотносительно / веб-приложения, поскольку версий веб-страниц меньше, чем базы данных. Страницы, имеющие относительно мало разных версий, я бы не вставил /var. Но я думаю, что это вопрос мнения и дебатов, а не твердых фактов.
jonallard
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.

LawrenceC
источник
Распределения и распределенные пакеты должны соответствовать FHS. Конечный «пользователь» (sysadmin, если это сервер) может делать то, что хочет, и размещать веб-сайт где угодно. Я размещал сайты в / home / pub или / home / web еще до того, как появился / srv. Но если бы я распространял проект программного обеспечения веб-сервера сегодня, по умолчанию будет использоваться / srv / www или что-то еще, что FHS, хотя администратор может это изменить.
Skaperen
@ultrasawblade, почему бы и нет /home/http?
Pacerier
1

Я хотел бы добавить, что размещение «корневого» веб-узла в / 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>
Марис Б.
источник