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

85

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

/var:

This directory contains variable data that changes constantly when the system is running.

FHS em /var diz o seguinte:

/var contains variable data files. This includes spool directories and files, administrative and logging data, and transient and temporary files.

Eles então dizem que coisas como logs, mail e spooler são colocadas 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 lugar ideal para colocar um diretório com arquivos ou conteúdo que é quase permanente.

Por que tantas vezes é colocado em /var ?

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

    
por jonallard 07.09.2012 / 07:27

9 respostas

35

Na verdade, não é o local "tradicional". Tradicionalmente, qualquer coisa que você instalou após o sistema operacional entrou em /usr/local e, de fato, esse é o "layout do caminho do Apache Clássico" (suas palavras) até hoje. Por muito tempo, foi /home/httpd .

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

Alguns trechos desse arquivo mostram que há muita variedade no local do docroot.

IIRC, /var/www entrou na minha vida com as versões 2000-2001 do Red Hat Linux 7.x (não do 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, há tantas outras ferramentas e tecnologias envolvidas que 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
    
por 07.09.2012 / 08:55
30

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

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

No entanto, também diz que decidir sobre a estrutura de /srv é da exclusiva responsabilidade do administrador local! Portanto, os pacotes não devem colocar nada em /srv , e a raiz do documento padrão não deve ser /srv , porque o pacote (apache) não sabe o que está em /srv e abaixo dele. Talvez um repositório de subversão com senha de texto claro 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 marcador de posição. Os pacotes usam /usr/share para conteúdo HTML estático ou /var/lib para conteúdo de variável dinâmica. Muitas pessoas erroneamente pensaram que deveriam colocar HTML em /var/www . Isso é um problema, porque os pacotes ocasionalmente usam isso também. Então, recentemente eles inventaram /var/www/html para pacotes. Espero que as pessoas não comecem a usar isso porque, novamente, precisam inventar um novo diretório ... e assim por diante.

Resumo: você deve usar /srv e configurar seus hosts virtuais Apache de acordo.

    
por 04.10.2014 / 00:52
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 ) é geralmente gerenciada pelo sistema (o gerenciador de pacotes). /var geralmente é onde os arquivos vão e não são gerenciados pelo gerenciador de pacotes ('dados' do sistema).

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

/var contains variable data files. This includes spool directories and files, administrative and logging data, and transient and temporary files.


No entanto, as FHS também indicam que os dados de www devem estar em /srv

/srv contains site-specific data which is served by this system.

This main purpose of specifying this is so that users may find the location of the data files for particular service, and so that services which require a single tree for readonly data, writable data and scripts (such as cgi scripts) can be reasonably placed.

The methodology used to name subdirectories of /srv is unspecified as there is currently no consensus on how this should be done. One method for structuring data under /srv is by protocol, eg. ftp, rsync, www, and cvs.

    
por 07.09.2012 / 13:48
13

As razões são principalmente históricas, como outros disseram. /var foi 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 de servidor de e-mail, spool de impressão etc. Basicamente para todas as coisas que não podem ser colocar em /usr (porque contém dados locais), não são programas de terceiros que vão em /opt , e não é descartável e volátil como estes vão em /tmp .

Como o Unix / Linux se desenvolveu, tornou-se um lugar bagunçado com uma mistura de vários diretórios diferentes juntos. Nos últimos anos tem havido uma tendência de tirar algumas coisas de lá, particularmente o conteúdo servido pela máquina (que agora, como por [ Hierarquia do Sistema de Arquivos Padrão 2.3, p.15 ] deve ir em /srv , não em /var/www ).

Coisa semelhante aconteceu com /var/run alguns anos atrás - com o esforço concentrado de várias distribuições, ela foi movida de /var/run para /run , que reuniu as funções do/var/lock,% co_de usado anteriormente % e /var/run .

    
por 07.09.2012 / 14:01
6

De minha experiência (sou um desenvolvedor da Web), o conteúdo do site está longe de ser estável. Mesmo no caso de arquivos html (esqueça o conteúdo gerado dinamicamente) eles estão sujeitos a mudanças constantes (emendas, omissões, etc.).

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

    
por 07.09.2012 / 08:36
6

IIRC, antigamente, sempre montamos /var como seu próprio sistema de arquivos (disco separado ou fatia de disco).

Uma das razões para isso, como outros afirmaram, é que há leitura / gravação pesada para esse sistema de arquivos (logs / et al). Ter um disco / fatia separado significa que ele pode ser mais bem ajustado para esse tipo de E / S (em relação a ler principalmente em / , /usr , etc ...).

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

Sistema de arquivos & A tecnologia de disco melhorou muito ao longo do tempo, por isso é uma ocorrência muito menos provável.

    
por 07.09.2012 / 23:12
3

/var é uma opção 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, ou seja, se você for um host da Web ou semelhante .

/home possivelmente não é o melhor porque coisas ruins podem acontecer com outras contas de shell de usuário se um usuário mal-intencionado ou mal-intencionado fizer upload para o limite de partição /home (supondo que a configuração tradicional de /var , /home etc. em partições separadas) pode afetar outras contas de usuário.

É claro que acho que /srv é melhor para isso, mas /var tem sido mais longo na tradição do UNIX.

    
por 07.09.2012 / 15:04
1

O que eu gostaria de acrescentar aqui é que colocar a web "root" em / usr entra em conflito com a parte do FHS que indica / usr como sendo compartilhável e somente leitura, já que servidores web diferentes, 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 nomear os que estão no topo da minha cabeça) esperam um local gravável na árvore de diretórios da web para uploads de arquivos de mídia / anexos. Então colocar a web tree sob / usr entraria em conflito se você quiser aderir à definição / usr somente leitura.

    
por 09.09.2012 / 15:49
1

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

Eu 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>
    
por 08.03.2016 / 15:46