Por que o diretório raiz de um servidor da Web é colocado por padrão em “/ var / www”?

87

O Tuxfiles diz o seguinte sobre a estrutura de diretórios do Linux:

/var:

Este diretório contém dados variáveis ​​que mudam constantemente quando o sistema está em execução.

A ESF/var diz o seguinte:

/varcontém arquivos de dados variáveis. Isso inclui diretórios e arquivos em spool, dados administrativos e de log e arquivos temporários e temporários.

Eles então dizem que coisas como logs, correio e spooler são colocados nessa pasta.

Tradicionalmente, uma instalação padrão do Apache ou Nginx no Ubuntu Linux colocará o diretório em /var/www/.

Não me parece o local ideal para colocar um diretório com arquivos ou conteúdo que deveria ser quase permanente.

Por que é tão frequentemente colocado /var?

Mais subjetivamente, é para onde deveria ir, de acordo com a estrutura de diretórios?

Jonallard
fonte
2
Essa é uma boa pergunta que eu também me perguntei muitas vezes e resolvi de alguma forma :).
Lobo
1
De acordo com a FHS /var/lib/wwwteria sido mais adequado ...
Nils
3
atual FHS diz que a raiz do servidor web deve estar em algum lugar abaixo/srv
LogicDaemon 30/03
1
/varé para dados não executáveis ​​e não configuráveis ​​e de propriedade de um usuário real que podem ser editados ou alterados (por exemplo, devem residir em um volume regravável). /var/libé especificamente para esse tipo de dados que deve sobreviver a uma reinicialização e não ser excluído por um processo de manutenção, isc-dhcp-serverusa /var/libpara armazenar, por exemplo, seu registro de concessões de DHCP. Portanto, seria um local lógico para os arquivos do servidor da web.
LawrenceC
@ Nils, Por que lib?
Pacerier 22/08/17

Respostas:

35

Na verdade, não é o local "tradicional". Tradicionalmente, tudo o que você instalou após a entrada do sistema operacional /usr/locale, de fato, esse é o "layout do caminho clássico do Apache" (suas palavras) até hoje. Durante muito tempo, foi /home/httpd.

O que você está vendo é que um Apache que foi configurado para um sistema operacional específico - seja Red Hat Linux, Mac OS X, GNU etc. - personalizará o local. A fonte do Apache foi bem projetada para isso; na verdade, se você rastrear o valor para o ServerRoot nos arquivos de origem, verá que ele começa nesse arquivo config.layout:

Alguns trechos desse arquivo mostrarão que há muita variedade no local da documentação.

O IIRC, /var/wwwentrou na minha vida com as versões 2000-2001 do Red Hat Linux 7.x (não o Red Hat Enterprise Linux). Por todas as razões citadas acima, achei que não fazia muito sentido - mas a realidade é que, na era moderna, tantas outras ferramentas e tecnologias estão envolvidas, a localização se move de qualquer maneira.

#   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
fonte
33

O uso de /var/wwwé confuso apenas à primeira vista.

De acordo com a ESF, os dados do servidor da web devem ir para /srv. Essa é a regra principal.

No entanto, também diz que a decisão sobre a estrutura /srvé de responsabilidade exclusiva do administrador local! Portanto, os pacotes não devem colocar nada /srve a raiz do documento padrão não deve estar /srv, porque o pacote (apache) não sabe o que está dentro /srve abaixo dele. Talvez um repositório do subversion com senha de texto não criptografado e outras coisas também. Portanto, deve haver um padrão fora de /srv. Esse padrão se torna /var/www.

/var/wwwé principalmente um espaço reservado. Os pacotes são usados /usr/sharepara conteúdo HTML estático ou /var/libpara conteúdo dinâmico dinâmico. Muitas pessoas pensaram erroneamente que deveriam colocar HTML /var/www. Isso é um problema, porque os pacotes também usam isso ocasionalmente. Recentemente, eles inventaram /var/www/htmlpara pacotes. Espero que as pessoas não comecem a usá-lo porque, novamente, elas precisam inventar um novo diretório ... e assim por diante.

Resumo: você deve usar /srve configurar seus hosts virtuais Apache adequadamente.

Hontvári Levente
fonte
5
Esta resposta é realmente valiosa. "Espero que as pessoas não comecem a usá-lo porque, de novo, precisam inventar um novo diretório ... e assim por diante". Mostra que muitos administradores devem reservar um tempo e ler alguns princípios básicos. (como eu estou fazendo agora;))
Toastgeraet
Isso já aconteceu nas versões do Ubuntu. A raiz do documento apache é o / var / www / html. Li em algum lugar que o motivo da mudança foi ser mais seguro. Eu não posso contestar isso como eu não sei. Posso lhe dizer que, na verdade, não vou usar esse caminho. e continuará com a instalação que uso há algum tempo. Montei um disco especificamente para hosts virtuais em / websites. Eu mantenho uma estrutura semelhante à hospedagem cpanel e sirvo em / websites / vhostname / public_html. Dessa forma, eu posso usar o vhost para armazenar emails ou o que for para o vhost específico.
22416 Chris
Na verdade, estou considerando particionar um disco e montar as partições no diretório vhost para backup individual de vhost. que me daria / sites / vhost / backup em cada vhost (eu corro um pouco e provavelmente vai funcionar mais em uma data posterior)
Chris
24

Embora eu concorde com a resposta de Akond, acho que há um aspecto mais importante nisso. A maioria dos outros locais (como /usr/local) é normalmente gerenciada pelo sistema (o gerenciador de pacotes). /vargeralmente é para onde vão os arquivos que não são gerenciados pelo gerenciador de pacotes ('dados' em todo o sistema).

Também acho que a definição da ESF é um pouco mais precisa (os dados não precisam estar "mudando constantemente"):

/ var contém arquivos de dados variáveis. Isso inclui diretórios e arquivos em spool, dados administrativos e de log e arquivos temporários e temporários.


No entanto, a ESF também especifica que os dados www deveriam estar entrando em/srv

/ srv contém dados específicos do site que são servidos por este sistema.

Esse principal objetivo de especificar isso é para que os usuários possam encontrar o local dos arquivos de dados para um serviço específico e para que serviços que exijam uma única árvore para dados somente leitura, dados graváveis ​​e scripts (como scripts cgi) possam ser colocados razoavelmente.

A metodologia usada para nomear subdiretórios de / srv não é especificada, pois atualmente não há consenso sobre como isso deve ser feito. Um método para estruturar dados em / srv é por protocolo, por exemplo. ftp, rsync, www e cvs.

Patrick
fonte
7
Errr, o ponto principal /usr/localé que não é gerenciado pelo gerenciador de pacotes.
Derobert
O @derobert / usr / local é muito usado por pacotes de terceiros (pacotes não fornecidos pelo repositório da distribuição). Também é comum as empresas que constroem seus próprios pacotes colocá-los lá (embora isso ainda se enquadre nos pacotes não fornecidos pela distribuição). Isso também é suportado pela ESF, veja a nota nº 27 na parte inferior do nome
Patrick
3
/srv/wwwfoi o caminho clássico nos sistemas SuSE (até SLES10) também.
Nils
1
@ nils espera, eles estavam em conformidade com a ESF e depois a deixaram deliberadamente ??? sigh
Patrick
1
@ Patrick assim é - fiquei bastante surpreso quando percebi isso. Provavelmente eles queriam ser mais parecidos com as outras variantes do Linux ...
Nils
13

Os motivos são principalmente históricos, como outros disseram. /varfoi usado para dados do sistema que mudam o tempo todo, por exemplo, arquivos de cache, logs, dados de tempo de execução (arquivos de bloqueio, por exemplo), armazenamento do servidor de correio, spool da impressora, etc. Basicamente, para todos os itens que não podem ser inseridos /usr( porque contém dados locais), não são programas de terceiros que entram /opte não são descartáveis ​​e voláteis à medida que entram /tmp.

À medida que o Unix / Linux se desenvolveu, tornou-se um lugar confuso, com uma mistura de vários diretórios diferentes reunidos. Nos últimos anos, tem havido uma tendência de mudar algumas coisas, particularmente o conteúdo fornecido pela máquina (que agora, conforme o [ Padrão de Hierarquia do Sistema de Arquivos 2.3, p.15 ], deve entrar /srv, não entrar /var/www).

O mesmo aconteceu com /var/runalguns anos atrás - com o esforço concentrado de várias distribuições, foi transferido /var/runpara o /runqual fundiram as funções dos usados ​​anteriormente /var/lock, /var/rune /dev/shm.

mindcorrosive
fonte
6

Pela minha experiência (eu sou desenvolvedor da Web), o conteúdo do site está longe de ser estável. Mesmo no caso de arquivos html (não importa com o conteúdo gerado dinamicamente), eles estão sujeitos a alterações constantes (emendas, omissões etc.).

Então, do meu ponto de vista, são variáveis. Portanto, eles são perfeitamente adequados no diretório / var e não há nada de errado nisso.

akond
fonte
6
Eu discordo. Ainda não vejo os arquivos HTML como "mudando constantemente". As alterações feitas nelas são deliberadas e, idealmente, seriam verificadas em um controle de revisão para rastreamento de alterações.
jonallard
2
As alterações no banco de dados Mysql também são deliberadas, mas os arquivos do banco de dados estão localizados em / var / db. Não te incomoda?
partir de
5
Claro que sim, mas eu diria que, no continuum de variável para constante, o banco de dados seria mais variável que o aplicativo HTML / Whatever / Web, uma vez que existem menos versões das páginas da Web do que as do banco de dados. As páginas com relativamente poucas versões diferentes, eu não colocaria /var. Mas acho que é uma questão de opinião e debate, e não fatos concretos.
jonallard
1
O que você diria se eu lhe mostrasse um banco de dados que não foi alterado por dois anos?
akond
2
Pelos argumentos fornecidos aqui, os diretórios pessoais pertencem a / var. Nesse caso, o / usr também é atualizado porque há atualizações constantes de patches de segurança etc. / var é para arquivos que "mudam frequentemente", o que permite montar um sistema de arquivos otimizado para gravações pesadas de arquivos pequenos. Argumentar que um banco de dados não pertence a / var não fortalece o caso dos sites, mas realmente o faz. Os sites são de leitura pesada e não beneficiam de estar em / var, e podem realmente atrasar processos essenciais do sistema, como log e email.
Duncan
6

IIRC, antigamente, sempre montávamos /varcomo seu próprio sistema de arquivos (disco separado ou fatia de disco).

Uma das razões para isso, como outros já declararam, é que há muita leitura / gravação nesse sistema de arquivos (logs / et al). Ter um disco / segmento separado significa que pode ser melhor ajustado para este tipo de I / O (versus principalmente ler /, /usretc ...).

A outra razão é que, naqueles dias, se o seu sistema travava durante uma operação de gravação, havia uma chance muito boa de o seu sistema de arquivos raiz ser corrompido, deixando-o em um estado difícil de reparar. Daí a necessidade de separação de /.

A tecnologia do sistema de arquivos e do disco melhorou bastante com o tempo, portanto, essa é uma ocorrência muito menos provável.

Brian
fonte
1
/ var como uma partição separada ainda é uma boa prática se você não quiser trazer para baixo a sua máquina quando seus registros ir selvagem, devido a / estar cheio
Duncan
3

/var é uma escolha decente para um local "base" neutro do usuário para acesso multiusuário, caso você tenha um site com vários hosts virtuais em execução que permita FTP ou outros uploads, por exemplo, se você é um host da web ou similar.

/homeé possivelmente não ideal, porque as coisas ruins poderiam acontecer com outras contas shell usuário se um irrefletidos ou maliciosos uploads do usuário para o /homelimite de partição (assumindo configuração tradicional de /var, /home, etc. sendo em partições separadas) pode afetar outras contas de usuário.

Claro que acho que /srvé melhor para isso, mas já /varexiste há mais tempo na tradição UNIX.

LawrenceC
fonte
Distribuições e pacotes distribuídos devem aderir à ESF. O "usuário" final (sysadmin, se for um servidor) pode fazer o que quiser e colocar o site onde quer que seja. Venho colocando sites em / home / pub ou / home / web desde antes de existir / srv. Mas se eu distribuísse um projeto de software para servidor da Web hoje, / srv / www ou o que a FHS disser seria o padrão, embora o administrador possa alterá-lo.
Skaperen
@ultrasawblade, por que não /home/http?
Pacerier
1

O que eu gostaria de adicionar aqui é que colocar a "raiz" da web em / usr entra em conflito com a parte da ESF que indica / usr como compartilhavel e somente leitura, uma vez que diferentes servidores da web, mesmo no mesmo "cluster" pode ter arquivos diferentes que contêm configurações diferentes, e isso não o torna ideal para / usr.

Além disso, alguns aplicativos da Web (MediaWiki e PhpBB para citar os que estão em cima da minha cabeça) esperam um local gravável na árvore de diretórios da Web para upload de anexos / arquivos de mídia. Portanto, colocar a árvore da web em / usr entraria em conflito se você desejar aderir à definição / somente leitura / usr.

Didi Kohen
fonte
1

O servidor da web Apache possui o site padrão em / var / www /, mas está sugerindo colocar outros sites em / srv /

Notei isso no Ubuntu Server 14.04 LTS. Seu arquivo apache2.conf padrão contém um bloco comentado:

#<Directory /srv/>
#   Options Indexes FollowSymLinks
#   AllowOverride None
#   Require all granted
#</Directory>
Maris B.
fonte