¿Por qué el directorio raíz de un servidor web se coloca por defecto en "/ var / www"?

87

Tuxfiles dice lo siguiente sobre la estructura de directorios de Linux:

/var:

Este directorio contiene datos variables que cambian constantemente cuando el sistema se está ejecutando.

FHS on/var dice lo siguiente:

/varcontiene archivos de datos variables. Esto incluye directorios y archivos de spool, datos administrativos y de registro, y archivos transitorios y temporales.

Luego continúan diciendo que cosas como los registros, el correo y la cola de impresión se colocan en esa carpeta.

Tradicionalmente, una instalación estándar de Apache o Nginx en Ubuntu Linux colocará el directorio en /var/www/.

No me parece el lugar ideal para colocar un directorio con archivos o contenido que se supone que es casi permanente.

¿Por qué se pone tan a menudo /var?

Más subjetivamente, ¿es aquí donde debería ir idealmente, de acuerdo con la estructura del directorio?

jonallard
fuente
2
Esta es una buena pregunta que también me hacía a menudo y la arreglé de alguna manera :).
lobo
1
Según FHS /var/lib/wwwhabría sido más adecuado ...
Nils
3
que define el FHS dice raíz del servidor web debe estar en algún lugar por debajo de/srv
LogicDaemon
1
/vares para datos no ejecutables, no configurados, no pertenecientes a un usuario real que se pueden editar o cambiar (por ejemplo, deben vivir en un volumen regrabable). /var/libes específicamente para ese tipo de datos que deberían sobrevivir a un reinicio y no ser eliminados por un proceso de mantenimiento, se isc-dhcp-serverutiliza /var/libpara almacenar su registro de arrendamientos DHCP, por ejemplo. Por lo tanto, sería un lugar lógico para los archivos del servidor web.
LawrenceC
@Nils, ¿por qué lib?
Pacerier

Respuestas:

35

En realidad no es la ubicación "tradicional" en absoluto. Tradicionalmente, todo lo que instaló después del SO entró /usr/local, y de hecho ese es el "diseño de ruta de Apache clásico" (sus palabras) hasta el día de hoy. Durante mucho tiempo lo fue /home/httpd.

Lo que está viendo es que un Apache que se ha configurado para un sistema operativo particular, ya sea Red Hat Linux, Mac OS X, GNU, etc., personalizará la ubicación. Las fuentes de Apache están bien diseñadas para esto, de hecho, si rastrea el valor de ServerRoot en los archivos de origen, verá que comienza en este archivo config.layout:

Algunos extractos de ese archivo le mostrarán que hay mucha variedad en la ubicación de docroot.

IIRC /var/wwwentró en mi vida con las versiones 2000-2001 de Red Hat Linux 7.x (no Red Hat Enterprise Linux). Por todas las razones que mencionas anteriormente, pensé que no tenía mucho sentido, pero la realidad es que en la era moderna hay tantas otras herramientas y tecnologías involucradas, la ubicación se mueve de todos modos.

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

El uso de /var/wwwes confuso solo a primera vista.

Según el FHS, los datos del servidor web deben ir a /srv. Esa es la regla principal.

Sin embargo, también dice que ¡decidir sobre la estructura /srves responsabilidad exclusiva del administrador local! Por lo tanto, los paquetes no deben incluir nada /srv, y la raíz del documento predeterminada no debe serlo /srv, porque el paquete (apache) no sabe qué hay dentro /srvy debajo de él. Tal vez un repositorio de subversión con contraseña de texto claro y otras cosas también. Por lo tanto, debe haber un valor predeterminado fuera de /srv. Que por defecto se convierta /var/www.

/var/wwwes principalmente un marcador de posición. Los paquetes se utilizan /usr/sharepara contenido HTML estático o /var/libpara contenido variable dinámico. Muchas personas erróneamente pensaron que deberían poner HTML /var/www. Eso es un problema, porque los paquetes ocasionalmente también lo usan. Tan recientemente inventaron /var/www/htmlpara los paquetes. Esperemos que la gente no empiece a usar eso porque, de nuevo, tienen que inventar un nuevo directorio ... y así sucesivamente.

Resumen: debe usar /srvy configurar sus hosts virtuales Apache en consecuencia.

Hontvári Levente
fuente
55
Esta respuesta es realmente valiosa. "Esperemos que la gente no empiece a usar eso porque, de nuevo, tienen que inventar un nuevo directorio ... y así sucesivamente". Muestra que muchos administradores deben tomarse el tiempo y leer algunos conceptos básicos. (como estoy haciendo ahora;))
Toastgeraet
Esto ya ha sucedido en las versiones de Ubuntu. La raíz del documento de Apache está por defecto en / var / www / html. Leí en alguna parte que la razón del cambio era que era más seguro. No puedo contestar a eso porque no lo sé. Puedo decirte que en realidad no usaré ese camino. y continuaré con la configuración que he estado usando durante un tiempo. Monto un disco específicamente para hosts virtuales en / sitios web. Mantengo una estructura similar al alojamiento de cpanel y sirvo desde / websites / vhostname / public_html. De esta manera, puedo usar el vhost para guardar el correo o lo que sea para el vhost específico.
Chris
Realmente estoy considerando particionar un disco y montar las particiones en el directorio vhost para la copia de seguridad de vhost individual. lo que me daría / sitios web / vhost / copia de seguridad en cada vhost (ejecuto algunos y probablemente ejecutaré más en una fecha posterior)
Chris
24

Si bien estoy de acuerdo con la respuesta de Akond, creo que hay un aspecto más importante. La mayoría de las otras ubicaciones (como /usr/local) son administradas típicamente por el sistema (el administrador de paquetes). /vargeneralmente es donde van los archivos que no son administrados por el administrador de paquetes ('datos' de todo el sistema).

También creo que la definición del FHS es un poco más precisa (los datos no tienen que estar "cambiando constantemente"):

/ var contiene archivos de datos variables. Esto incluye directorios y archivos de spool, datos administrativos y de registro, y archivos transitorios y temporales.


Sin embargo, el FHS también es una especie en la que los datos de www deberían entrar/srv

/ srv contiene datos específicos del sitio que sirve este sistema.

Este propósito principal de especificar esto es para que los usuarios puedan encontrar la ubicación de los archivos de datos para un servicio en particular, y para que los servicios que requieren un solo árbol para datos de solo lectura, datos escribibles y scripts (como scripts cgi) puedan ubicarse razonablemente.

La metodología utilizada para nombrar subdirectorios de / srv no está especificada, ya que actualmente no hay consenso sobre cómo se debe hacer esto. Un método para estructurar datos bajo / srv es por protocolo, por ejemplo. ftp, rsync, www y cvs.

Patricio
fuente
77
Errr, el punto /usr/locales que no es administrado por el administrador de paquetes.
derobert
@derobert / usr / local se utiliza mucho en paquetes de terceros (paquetes no proporcionados por el repositorio de la distribución). También es común que las compañías que crean sus propios paquetes los coloquen allí (aunque eso todavía se incluye en paquetes no proporcionados por la distribución). Esto también es respaldado por el FHS, vea la nota # 27 en la parte inferior de pathname.com/fhs/pub/fhs-2.3.html
Patrick
3
/srv/wwwTambién era el camino clásico en los sistemas SuSE (hasta SLES10).
Nils
1
¿@nils espera, cumplieron con FHS y luego lo dejaron deliberadamente? suspiro
Patrick
1
@Patrick así es: estaba bastante asombrado cuando me di cuenta de esto. Probablemente querían ser más como las otras variantes de Linux ...
Nils
13

Las razones son principalmente históricas, como otros dijeron. /varse ha utilizado para datos del sistema que cambian todo el tiempo, por ejemplo, archivos de caché, registros, datos de tiempo de ejecución (archivos de bloqueo, por ejemplo), almacenamiento del servidor de correo, cola de impresora, etc. Básicamente para todo lo que no se puede ingresar /usr( porque contiene datos locales), no son programas de terceros que entran /opty no son descartables y volátiles a medida que entran /tmp.

A medida que se desarrollaba Unix / Linux, se convirtió en un lugar desordenado con una mezcla de varios directorios diferentes juntos. En los últimos años, ha habido una tendencia a sacar algunas cosas de allí, en particular el contenido servido por la máquina (que ahora según [ Estándar de Jerarquía del Sistema de Archivos 2.3, p.15 ] debería entrar /srv, no entrar /var/www).

Algo similar ocurrió a /var/rununos años atrás - con el esfuerzo concentrado de varias distribuciones, se trasladó desde /var/runen /runel que fusionan las funciones de la utilizada anteriormente /var/lock, /var/runy /dev/shm.

mente corrosiva
fuente
6

Desde mi experiencia (soy desarrollador web) el contenido del sitio web está lejos de ser estable. Incluso en el caso de archivos html (no importa el contenido generado dinámicamente) están sujetos a cambios constantes (enmiendas, omisiones, etc.).

Desde mi punto de vista, son variables. Por lo tanto, se adaptan perfectamente al directorio / var y no hay nada de malo en eso.

akond
fuente
66
No estaría de acuerdo. Todavía no veo los archivos HTML como "en constante cambio". Los cambios que se realizan en ellos son deliberados e idealmente deberían registrarse en un control de revisión para el seguimiento de cambios.
jonallard
2
Los cambios en la base de datos Mysql también son deliberados, pero los archivos de la base de datos se encuentran en / var / db. ¿No te molesta?
akond
55
Claro que sí, pero yo diría que en el continuo de variable a constante, el DB sería más variable que la aplicación web HTML / whatever /, ya que hay menos versiones de las páginas web que las de la base de datos. Las páginas que tienen relativamente pocas versiones diferentes, no las pondría /var. Pero creo que es una cuestión de opinión y debate más que hechos concretos.
jonallard
1
¿Qué diría si le muestro una base de datos que no ha sido modificada por dos años?
akond
2
Según los argumentos dados aquí, los directorios principales pertenecen a / var. En este caso, también lo hace / usr porque se actualiza constantemente para parches de seguridad, etc. / var es para archivos que cambian "con frecuencia", lo que permite montar un sistema de archivos optimizado para escrituras pesadas de archivos pequeños. Argumentar que una base de datos no pertenece a / var no fortalece el caso de que los sitios web sí lo hacen, realmente hace que no lo sean. Los sitios web son de lectura pesada y no obtienen ningún beneficio de estar en / var, y en realidad pueden ralentizar los procesos esenciales del sistema, como el registro y el correo electrónico.
Duncan
6

IIRC, en los viejos tiempos, siempre montamos /varcomo su propio sistema de archivos (disco separado o segmento de un disco).

Una de las razones de esto, como han dicho otros, es que hay mucha lectura / escritura en ese sistema de archivos (logs / et al). Tener un disco / segmento independiente significa que puede ser sintonizado mejor para este tipo de E / S (en comparación con la mayoría de leer /, /usretc ...).

La otra razón es que en aquellos días, si su sistema se bloqueaba durante una operación de escritura, había una muy buena posibilidad de que su sistema de archivos raíz se corrompiera dejándolo en un estado difícil de reparar. De ahí la necesidad de separación de /.

El sistema de archivos y la tecnología de disco ha mejorado mucho con el tiempo, por lo que es mucho menos probable.

Brian
fuente
1
/ var como una partición separada sigue siendo una buena práctica si no desea derribar su máquina cuando sus registros se vuelven locos, debido a / estar lleno
Duncan
3

/var es una opción decente para una ubicación "base" neutral para el usuario para el acceso multiusuario, en el caso de que tenga un sitio web con múltiples hosts virtuales en ejecución que permita FTP u otras cargas, es decir, si es un host web o similar.

/homees posiblemente no óptima porque las cosas malas pueden suceder a otras cuentas de concha de usuario si un irreflexivas o maliciosos usuario carga al /homelímite de partición (suponiendo que la configuración tradicional de /var, /home, etc estar en particiones separadas) que pueden afectar a otras cuentas de usuario.

Por supuesto, creo que /srves mejor para esto, pero /varha existido por más tiempo en la tradición de UNIX.

LawrenceC
fuente
Las distribuciones y los paquetes distribuidos deben cumplir con el FHS. El "usuario" final (administrador del sistema si es un servidor) puede hacer lo que quiera y poner el sitio web donde sea. He estado poniendo sitios web en / home / pub o / home / web desde antes de que hubiera / srv. Pero si tuviera que distribuir un proyecto de software de servidor web hoy, / srv / www o lo que FHS dice sería el predeterminado, aunque el administrador puede cambiarlo.
Skaperen
@ultrasawblade, ¿por qué no /home/http?
Pacerier
1

Lo que me gustaría agregar aquí es que poner la "raíz" web en / usr entra en conflicto con la parte del FHS que indica que / usr es compartible y de solo lectura, ya que diferentes servidores web, incluso en el mismo "clúster" puede tener diferentes archivos que contienen diferentes configuraciones, y esto no lo hace ideal para / usr.

Además, algunas aplicaciones web (MediaWiki y PhpBB para nombrar las que están en la parte superior de mi cabeza) esperan una ubicación que se pueda escribir en el árbol del directorio web para cargar archivos adjuntos / archivos multimedia. Por lo tanto, colocar el árbol web en / usr entraría en conflicto si desea adherirse a la definición de solo lectura / usr.

Didi Kohen
fuente
1

El servidor web Apache tiene un sitio web predeterminado en / var / www / pero sugiere colocar otros sitios web en / srv /

Me di cuenta de esto en Ubuntu Server 14.04 LTS. Su archivo predeterminado apache2.conf contiene un bloque comentado:

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