¿En qué orden carga Apache los archivos conf y cuáles?

8

Estoy viendo un servidor CentOS 6.5 con un marco web instalado que muchos han agregado a lo largo de los años. Hay lo que parecen 5 archivos .conf activos en / conf, incluido httpd.conf.

En httpd.conf, las lecturas de inclusión

Include conf.d/*.conf

y eso toma todos los archivos en ese directorio, pero sin ningún orden específico aplicado que yo sepa, ¿y qué pasa con el directorio / conf (no .d)?

¿Existe una configuración que indique el orden de carga o simplemente se toman de az?

No soy el administrador del servidor, soy un desarrollador y el problema radica en las rutas para cargar archivos a un directorio / Temp, donde he verificado que la ruta especificada es correcta para los archivos que me preocupan.

Entonces, la primera pregunta es:

¿Apache carga todo desde / conf o hay una lista especificada en alguna parte?

La segunda pregunta sería:

¿En qué orden Apache carga los archivos, alfabéticamente?

Por último:

¿Se incluye un archivo que no termina en .conf ? Por ejemplo, si nombre algo myconfig.conf.old, ¿Apache lo omitirá?

chrtp
fuente

Respuestas:

12

El orden es alfabético. Solo carga lo que especifica la ruta Incluir. En el caso de Include conf.d/*.confapache cargará todos los archivos con nombres que terminen en .conf.

Este es un extracto de la documentación de Apache :

Los caracteres comodín de estilo shell (fnmatch ()) se pueden usar para incluir varios archivos a la vez, en orden alfabético . Además, si Incluir apunta a un directorio, en lugar de a un archivo, Apache leerá todos los archivos en ese directorio y cualquier subdirectorio. Pero no se recomienda incluir directorios completos, porque es fácil dejar accidentalmente archivos temporales en un directorio que puede hacer que httpd falle.

sospechoso
fuente
Gracias, eso contesta las preguntas 1 y 2 ciertamente. Miré los documentos de Apache pero no pude encontrar la respuesta.
chrtp
En términos generales (el orden de los elementos de configuración anula los elementos anteriores) es correcto. Ciertamente si los comandos están en la misma sección de configuración. Pero, por ejemplo, es posible (usando AllowOverride) anular elementos de configuración con config en un .htaccessarchivo.
sospechoso
Lo siento, edité mi comentario antes de ver el tuyo. No hay .htaccess en este caso, pero hay un archivo que comienza con 't' que anula todo lo demás. Voy a cambiar el nombre o mover el archivo.
chrtp
1
@chrtp, y ¿por qué un archivo que comienza tanula todo lo demás?
Andrew Savinykh
1

Apache carga una configuración adicional basada en la directiva "Incluir". Probablemente se ve así:

Include conf.d/*.conf

Entonces, obviamente, incluye todo en "conf.d" que se parece a "* .conf".

Para hacerlo aún más loco, puede agregar un número arbitrario de directorios con "incluir", todos los cuales podrían contener aproximadamente los mismos archivos de configuración, que todos se anularían felizmente al inicio ... Y luego se anularán por el archivo .htaccess en varios directorios alojados.

Por lo que puedo decir, httpd.conf es primero, seguido de los directorios en el orden en que están incluidos y luego alfabéticamente desde allí.

Buenos tiempos. Puede usar apachectl -t o apachectl configtest para tener una idea de si su configuración causará o no problemas.

Satanicpuppy
fuente
1
Gracias, parece que alguien ha dejado un archivo llamado template.conf allí que, por supuesto, se carga al final y luego anula cualquier otro archivo que especifique la ruta a / Temp. ¡Solo puedo adivinar qué más se está rompiendo con eso allí!
chrtp
1
@chrtp Para agregar a la hilaridad, las directivas se pueden especificar en tiempo de ejecución usando -C (para agregarlas antes de leer los archivos de configuración) y -c (para leerlas después de los archivos de configuración), para que pueda obtener una configuración completamente diferente desde la línea de comandos en el inicio.
Satanicpuppy
1

Si desea cambiar el orden, simplemente abra el primer archivo conf en el directorio de sitios disponibles y, antes del primer VirtualHost *: 80, agregue su código de host virtual.

En mi caso, quiero que hub.xxx.com.conf esté antes de bayxxx.com.conf. Entonces abro hub.xxx.com.conf y ubico el host virtual al comienzo de un archivo

Por ejemplo:

<VirtualHost *:80>
    DocumentRoot /www/hub.xxx.com/www/root
    ServerName hub.xxx.com
    ServerAlias *.hub.xxx.com
    <Directory "/www/hub.xxx.com/www/root">
        allow from all
        Options +Indexes
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot /www/bayxxx.com/www/root
    ServerName bayxxx.com
    ServerAlias www.bayxxx.com
    <Directory "/www/bayxxx.com/www/root">
        allow from all
        Options +Indexes
    </Directory>
</VirtualHost>
Pavel
fuente