Configurar Apache desde cero en Linux

Author
By Darío Rivera
Posted on 2022-05-13 in Linux

Apache es uno de los web servers más utilizados a lo largo de todo la web. Es fácil de configurar, fácil de instalar y customizable. En este post verás cómo realizar una configuración de este web server desde cero. Si ya tienes una configuración por defecto, también te ayudará a entender dicha configuración y cómo cambiarla.

Analizar la configuración inicial

Dependiendo el sistema operativo donde tienes instalado apache lo primero que debes hacer es detectar en dónde están los archivos de configuración. Para esto, basta ejecutar el siguiente comando.

sudo apachectl -D DUMP_INCLUDES

La salida del comando será similar a la que se muestra a continuación. Hemos recortado un poco la respuesta debido a que puede mostrar un gran número de archivos de configuración.

Included configuration files:
  (*) /etc/apache2/apache2.conf
    (146) /etc/apache2/mods-enabled/access_compat.load
    (146) /etc/apache2/mods-enabled/alias.load
    (146) /etc/apache2/mods-enabled/auth_basic.load
  ...

Habiendo detectado el archivo de configuración principal puedes echar un vistazo a la configuración interna.

sudo vim /etc/apache2/apache2.conf

Algunas distribuciones como Ubuntu suelen organizar muy bien la estructura de los archivos de Apache. En estos casos la configuración de directorios lucirá más o menos así:

#	/etc/apache2/
#	|-- apache2.conf
#	|	`--  ports.conf
#	|-- mods-enabled
#	|	|-- *.load
#	|	`-- *.conf
#	|-- conf-enabled
#	|	`-- *.conf
# 	`-- sites-enabled
#	 	`-- *.conf

Esto se puede verificar en la configuración general. En este caso luciría así.

# Include generic snippets of statements
IncludeOptional conf-enabled/*.conf

# Include the virtual host configurations:
IncludeOptional sites-enabled/*.conf

Esto indica que los virtual hosts que creemos deben estar cargados en en la carpeta sites-enabled. Por otro lado la configuración estará cargada en conf-enabled. Generalmente, estas carpetas contienen enlaces simbólicos a los archivos en otras carpetas en donde realmente está la configuración, sites-available y conf-available respectivamente.

Configuraciones por defecto

Puede suceder, en el caso de algunos sistemas cómo Ubuntu que venga un archivo por defecto llamado 000-default. Este sitio puede deshabilitarse como sigue.

sudo a2dissite 000-default

Puedes también optar por cambiar el path por defecto de apache y configurarlo hacia algun directorio en tu home.

<VirtualHost *:80>
    DocumentRoot /home/username/www
    ....
    ErrorLog ${APACHE_LOG_DIR}/error.log
    ...
<VirtualHost>

Siempre es bueno tener un sitio q se muestre apenas se ingresa a "localhost" o 127.0.0.1 para ver q todo esté funcionando bien. Además, algunos comandos como el siguiente

apachectl status

Realizan una llamada HTTP a servidor local para obtener el estado de apache.

Configuración de permisos

Cuando configuras nuevos proyectos debes tener en cuenta si estos van a quedar en la carpeta configurada por defecto en tu servidor de apache o en cualquier otra carpeta del sistema operativo. Las carpetas bajo apache deben tener el grupo de apache (www-data / apache), entre otros permisos para que puedan ser leídas de manera correcta.

Para asegurarte cual usuario de apache tienes en su sistema operativo puedes ejecutar el siguiente comando:

cat /etc/group | grep 'apache\|www'

Una vez hecho esto, suponiendo que por ejemplo el usuario sea www-data debes asignar el grupo a la carpeta en donde está(n) tu proyecto(s). Esta carpeta puede ser la que viene configurada con la instalación de apache por defecto o un path de tu preferencia como por ejemplo /home/user/www. Para este ejemplo vamos a suponer que la carpeta de tus proyectos es /var/www

Nota: Si escojes una carpeta diferente a la carpeta por defecto debes asegurarte que existan permisos de búsqueda sobre todos los componentes del path.

Lo primero que debes hacer es cambiar el grupo y usuario de la carpeta de proyectos de apache.

sudo chown -R your-user:www-data /var/www

Otra recomendación es cambiar la pertenencia de este directorio y todos sus subdirectorios para agregar el grupo, los permisos de escritura y configurar el ID del grupo para los directorios que se creen de ahora en adelante.

sudo chmod 2775 /var/www
find /var/www -type d -exec sudo chmod 2775 {} \;

Finalmente podemos cambiar los permisos para todos los archivos dentro del path (incluídos sus subdirectorios) para agregar el grupo y los permisos de escritura.

find /var/www -type f -exec sudo chmod 0664 {} \;

Configuración de PHP

Por defecto, apache viene configurado para que el archivo index.html tome precedencia sobre cualquier otro archivo en un directorio. Para cambiar este comportamiento y permitir que index.php tome precedencia debes encontrar la configuración del DirectoryIndex del módulo DIR. Puedes usar el mismo comando visto al comienzo de este tutorial para hallar la config, si está debe ser similar a la siguiente:

vim /etc/apache2/mods-available/dir.conf

Si no, deberás buscar en el archivo de configuración principal algo similar a lo siguiente.

<IfModule mod_dir.c>
	DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
</IfModule>

Siendo así, debería quedar de la siguiente forma.

<IfModule mod_dir.c>
	DirectoryIndex index.php index.html index.cgi index.pl index.php index.xhtml index.htm
</IfModule>

Otra cosa que debes agregar si no está, es la lectura de archivos PHP. En Ubuntu suele estar en la configuración de módulos dependiendo de las versiones instaladas.

vim /etc/apache2/mods-available/php7.4.conf

Si no existe esta configuración, puedes agregarla en el archivo principal de apache. Esta config debería ser similar a la siguiente:

<FilesMatch ".+\.ph(ar|p|tml)$">
    SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch ".+\.phps$">
    SetHandler application/x-httpd-php-source
    Require all denied
</FilesMatch>
# Deny access to files without filename (e.g. '.php')
<FilesMatch "^\.ph(ar|p|ps|tml)$">
    Require all denied
</FilesMatch>

Acerca de Darío Rivera

Author

Ingeniero de desarrollo en PlacetoPay , Medellín. Darío ha trabajado por más de 6 años en lenguajes de programación web especialmente en PHP. Creador del microframework DronePHP basado en Zend y Laravel.

Sólo aquellos que han alcanzado el éxito saben que siempre estuvo a un paso del momento en que pensaron renunciar.