Apache DocumentRoot no cambia

0

Estoy tratando de configurar un servidor Apache 2 en mi máquina Arch Linux. Todo funciona muy bien hasta ahora, incluidos https y php, pero ahora quiero cambiar DocumentRootel valor predeterminado /srv/httpa /var/www/foo. He cambiado DocumentRoot /srv/httpy <Directory "/srv/http">a DocumentRoot /var/www/fooy <Directory "/var/www/foo">, respectivamente, y vuelve a cargar la configuración utilizando systemctl restart httpd. Ahora recibo 403 errores al intentar acceder https://localhosto cualquier cosa dentro.

Una investigación adicional resulta que cambiar la <Directory ...>declaración tiene un efecto, pero cambiar la DocumentRootno. Cuando me puse Require all granteden <Directory />eliminar estos errores 403, resulta que Apache todavía está tratando de servir a los documentos de /srv/http. Por ejemplo, pongo un archivo que contiene prueba.php <?php echo exec('pwd'); ?>en tanto /srv/http/y /var/www/foo/y el acceso a https://localhost/test.phplas salidas /srv/httpde mi navegador. Intentar acceder a los documentos ubicados en, /var/www/foopero no en, /srv/httpdará como resultado errores 404.

¿Por qué sigue usando Apache /srv/http? He cambiado absolutamente cada ocurrencia de /srv/httpque /var/www/fooen /etc/httpd/conf/httpd.confy reiniciar Apache varias veces, pero mi raíz del documento simplemente no va a cambiar. Según el artículo de Apache Arch Wiki, he hecho todo lo necesario.

Por supuesto, podría simplemente hacer un enlace simbólico /srv/httpa la ubicación deseada, pero esa no parece ser la forma correcta de hacerlo.

Aquí están las partes de mi httpd.configque creo que podrían ser relevantes:

<Directory />
    AllowOverride none
    Require all granted     # Will of course change to denied again once everything works
</Directory>

DocumentRoot "/var/www/foo"

<Directory "/var/www/foo">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

Por supuesto, /var/www/foosí y todos los directorios principales tienen al menos 755permisos.

Raptilicus
fuente

Respuestas:

1

¿Tiene alguna sección de VirtualHost en httpd.conf? Si tiene una VirtualHostsección con /srv/httpset as its DocumentRoot, es posible que Apache esté usando ese directorio de la VirtualHostsección, aunque haya cambiado el DocumentRootvalor fuera de la VirtualHostsección.

punto de luna
fuente
No, no tengo ningún host virtual configurado. Además, eso no haría una diferencia porque utilicé la función de búsqueda de vim para asegurarme de que no haya ninguna ocurrencia de /srv/httpizquierda.
Raptilicus
1
Aunque el problema que encontró puede no estar relacionado con una configuración de VirtualHost, Apache también puede cargar hosts virtuales desde un archivo externo, por ejemplo Include conf/extra/httpd-vhosts.conf, vea Cómo configurar los hosts virtuales de Apache en Arch Linux , para que pueda verificar si esa línea existe y si existe o no está comentado en httpd.conf. Si no está comentado, puede poner un #al principio de la línea para que sea un comentario y reiniciar Apache para ver si eso hace la diferencia.
luna
@Raptilicus, también puede consultar el registro de errores principal para ver si hay algo inusual allí que pueda ofrecer una pista sobre el problema. La ubicación de ese archivo se muestra si ejecuta apachectl -S. Eso también muestra el valor predeterminado para DocumentRoot, pero el valor que ve DocumentRootallí no es necesariamente el que se usa localhostsi una VirtualHostsección está vigente dentro httpd.confo desde un httpd-vhosts.confarchivo externo .
luna
El vhosts.confno estaba incluido. Pero investigando más en esa dirección, descubrí que httpd-ssl.confcontenía una configuración de host virtual que usa explícitamente /srv/http. También cambié eso /var/www/foo, ¡y ahora todo funciona! ¡Gracias!
Raptilicus