En esta entrada vamos a ver cómo instalar Apache en Fedora 30 paso a paso, y así tener en nuestro sistema el servidor web más popular de Internet. Además, configuraremos servidores virtuales y certificados SSL para el protocolo HTTPS.
Contenido
Antes de instalar Apache en Fedora 30
Para seguir esta guía de instalación de Apache en Fedora necesitarás cumplir estos requisitos:
- Un sistema Fedora 30 actualizado.
- Acceso como root o usuario con permisos de sudo.
- Conexión a Internet.
Para las configuraciones avanzadas necesitas dominios que apunten al servidor Fedora (pueden ser reales o locales) y un certificado SSL para el acceso seguro.
Como seguramente estás deseando empezar ya, ¡vamos al asunto!
Instalar Apache en Fedora 30
Para instalar Apache en Fedora lo haremos a través de los propios repositorios de la distribución. Por tanto, el primer paso será actualizar el sistema:
~$ sudo yum -y update
Con el sistema actualizado, ya podemos instalar el paquete httpd mediante yum:
~$ sudo yum -y install httpd
En unos instantes se descarga e instala Apache junto con sus dependencias. Sin embargo, el servicio no arranca en este momento ni con el inicio del sistema. Tendremos que activarlo manualmente.
Cómo activar e iniciar Apache en Fedora
Para activar el servidor web Apache y que así inicie con el sistema tendremos que usar systemctl:
~$ sudo systemctl enable httpd Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service. ~$
Solucionado esto vamos ahora a iniciar Apache:
~$ sudo systemctl start httpd
Cómo comprobar el estado de Apache en Fedora
En este momento ya está funcionando el servidor web, como podríamos comprobar con systemctl status:
~$ systemctl status httpd ● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor prese> Active: active (running) since Thu 2019-03-28 12:14:40 CET; 4min 42s ago Docs: man:httpd.service(8) Main PID: 29073 (httpd) Status: "Running, listening on: port 80" Tasks: 213 (limit: 1141) Memory: 14.8M CGroup: /system.slice/httpd.service ├─29073 /usr/sbin/httpd -DFOREGROUND ├─29074 /usr/sbin/httpd -DFOREGROUND ├─29075 /usr/sbin/httpd -DFOREGROUND ├─29076 /usr/sbin/httpd -DFOREGROUND └─29077 /usr/sbin/httpd -DFOREGROUND mar 28 12:14:39 fedora30.local systemd[1]: Starting The Apache HTTP Server... mar 28 12:14:40 fedora30.local httpd[29073]: Server configured, listening on: p> mar 28 12:14:40 fedora30.local systemd[1]: Started The Apache HTTP Server. lines 1-18/18 (END)
Parece que todo funciona perfectamente, así que es el momento de intentar acceder desde un navegador en otra máquina usando la dirección IP del servidor Fedora o cualquier dominio que apunte a esa IP:

¿Qué está pasando? ¿Por qué no funciona?
Cómo configurar el firewall en Fedora para permitir Apache
Si no te esperabas este resultado es porque no sabías que Fedora incluye por defecto un firewall activado.
Tendremos que añadir una excepción al firewall que permita las conexiones al servidor Apache. Usaremos para ello el comando firewall-cmd, indicando que el cambio sea permanente y, si lo consideramos oportuno, añadiendo además del protocolo HTTP estándar también el HTTP seguro:
~$ sudo firewall-cmd --permanent --add-service=http --add-service=https success ~$
Los cambios no entran en vigor de inmediato, ya que es necesario recargar la configuración del firewall:
~$ sudo firewall-cmd --reload success ~$
Intentamos conectar de nuevo a la página por defecto de Apache:

Efectivamente, se trataba del firewall, pero ya lo hemos resuelto de forma permanente.
Cómo configurar Apache en Fedora 30
Para configurar Apache en Fedora hemos de tener en cuenta que los archivos de configuración se encuentran en la ruta /etc/httpd/.
El archivo principal de configuración es /etc/httpd/conf/httpd.conf donde, entre otras cosas, podemos ver algunos valores por defecto de la configuración de Apache en Fedora:
- El usuario y grupo con que se ejecuta Apache es apache y apache, respectivamente.
- No está permitido el acceso vía web a contenidos fuera de las rutas /var/www/ y /var/www/html/. Para poder ubicar archivos fuera de estas rutas habrá que permitir el acceso explícitamente en la configuración general o particular (servidores virtuales).
- La configuración de Apache incluye los archivos con extensión .conf ubicados en las rutas /etc/httpd/conf.d/ y /etc/httpd/conf.modules.d/.
Para que cualquier cambio de configuración tenga efecto normalmente es suficiente con recargar la configuración del servicio httpd:
~$ sudo systemctl reload httpd
Aunque en ocasiones, como cuando se incluyen nuevos módulos en la configuración de Apache, es necesario reiniciar el servicio:
~$ sudo systemctl restart httpd
Servidores virtuales (virtual host) en Fedora
Si queremos que Apache en Fedora pueda servir distintas páginas para distintos dominios que apunten al servidor, tendremos que configurar servidores virtuales.
Si todavía no tienes registrados los dominios, te recomiendo Namecheap, el lugar donde registro y renuevo los dominios de mis sitios web, incluido este que estás visitando.
Para configurar servidores virtuales de Apache en Fedora (Apache virtual hosts) es muy conveniente crear una pequeña infraestructura similar a la que usan las distribuciones basadas en Debian.
1. Crear la estructura de los archivos de configuración
Cada servidor virtual tendrá su configuración particular guardada en su propio archivo.
Por un lado, crearemos una ruta (/etc/httpd/sites-available/) para guardar todos los archivos de configuración de servidores virtuales. Por otro lado crearemos otra ruta (/etc/httpd/sites-enabled/) donde enlazaremos simbólicamente sólo aquellas configuraciones de los servidores virtuales que queramos que estén activos.
Así que el primer paso es crear estas nuevas rutas dentro de la ruta de configuración de Apache:
~$ sudo mkdir /etc/httpd/sites-available /etc/httpd/sites-enabled
2. Incluir la configuración de los servidores
Aunque tengamos varias configuraciones guardadas en sites-available/, hemos dicho que sólo estarán en funcionamiento aquellas que estén presentes (a través de los enlaces) en sites-enabled/.
El siguiente paso, entonces, es indicarle a Apache que cargue las configuraciones de los servidores virtuales activos. Esto lo haremos editando el archivo httpd.conf:
~$ sudo nano /etc/httpd/conf/httpd.conf
Al final del archivo añadiremos una directiva IncludeOptional que se encargará de incluir todos los archivos de configuración presentes en sites-enabled/:
IncludeOptional sites-enabled/*.conf
3. Crear un servidor virtual por defecto
Antes de configurar servidores virtuales, Apache ofrece la página web por defecto a través de cualquier dominio que apunte al servidor Fedora.
Sin configuramos un solo servidor virtual nos encontraremos con el problema de que se comportará como servidor por defecto, mostrando la página web de ese servidor virtual a cualquier petición de dominio que apunte al servidor Fedora pero no tenga un servidor virtual particular configurado.
Puede que este comportamiento no te moleste, pero no es una configuración adecuada. En este caso, lo mejor es configurar como primer servidor virtual el servidor por defecto.
Crearemos un archivo de configuración mínimo, con el nombre 000-default.conf para que sea la primera de todas las configuraciones en cargar.
~$ sudo nano /etc/httpd/sites-available/000-default.conf
Y el contenido de este archivo puede ser algo tal que así:
<VirtualHost *:80> </VirtualHost>
Este bloque VirtualHost vacío adoptará los valores por defecto del archivo de configuración principal de Apache, httpd.conf, de modo que mostrará la página web por defecto de Fedora a cualquier petición que no tenga un servidor virtual configurado.
Para activar la configuración del nuevo servidor virtual por defecto enlazaremos adecuadamente su archivo de configuración:
~$ sudo ln -s /etc/httpd/sites-available/000-default.conf /etc/httpd/sites-enabled/000-default.conf
Y recargamos la configuración de Apache:
~$ sudo systemctl reload httpd
Ahora el sistema ya está listo para hacer funcionar servidores virtuales de Apache en Fedora. Lo siguiente es configurar de forma individual cada servidor virtual.
4. Configurar los servidores virtuales personalizados
Es el momento de crear nuestros propios servidores virtuales. Para este ejemplo vamos a tener un par de subdominios apuntando a nuestro servidor Fedora, para los que queremos configurar sus propios servidores virtuales.
Estos subdominios serán vhost1.fedora30.local y vhost2.fedora30.local.
Para vhost1.fedora30.local crearemos la carpeta de documentos dentro de /var/www/, que es la ruta que Apache configura por defecto para alojar archivos web.
Creamos la carpeta:
~$ sudo mkdir /var/www/vhost1.fedora30.local
Y creamos un archivo index.html con un contenido mínimo:
~$ sudo nano /var/www/vhost1.fedora30.local/index.html
Cualquier mensaje o saludo servirá para la prueba.
Ahora crearemos la configuración para este servidor virtual.
~$ sudo nano /etc/httpd/sites-available/vhost1.fedora30.local.conf
Una configuración muy básica sería esta:
<VirtualHost *:80> ServerName vhost1.fedora30.local DocumentRoot /var/www/vhost1.fedora30.local <Directory /var/www/vhost1.fedora30.local> </Directory> LogLevel info ErrorLog /var/log/httpd/vhost1.fedora30.local-error.log CustomLog /var/log/httpd/vhost1.fedora30.local-access.log combined </VirtualHost>
En ServerName indicamos el dominio al que responderá el servidor virtual. DocumentRoot indica la ruta donde se encuentran los archivos web de este servidor. El bloque Directory está vacío, por lo que heredará la configuración por defecto de Apache para /var/www/. Por último, añadimos las rutas de los archivos de registro personalizados para este servidor.
Una vez guardada la configuración, creamos el enlace simbólico necesario para activarla:
~$ sudo ln -s /etc/httpd/sites-available/vhost1.fedora30.local.conf /etc/httpd/sites-enabled/vhost1.fedora30.local.conf
Antes de activar la configuración de este servidor virtual, vamos a crear rápidamente la configuración para vhost2.fedora30.local.
En esta ocasión queremos que los archivos web residan en la carpeta del usuario que mantendrá la web, en lugar de /var/www/. Es una opción que permite a un usuario estar trabajando en sus propios archivos sin necesidad de utilizar el comando sudo constantemente, o solicitar intervención del administrador.
Crearemos la carpeta:
~$ mkdir -p ~/public_html/vhost2.fedora30.local
He creado la carpeta dentro de ~/public_html/ porque tradicionalmente es en esta carpeta donde los usuarios de un sistema Unix/Linux guardan sus proyectos web.
Incluimos un contenido mínimo en la carpeta web:
~$ nano ~/public_html/vhost2.fedora30.local/index.html
Tras haber creado un mensaje de pruebas o añadir el contenido que necesitemos, creamos el archivo de configuración de este segundo servidor virtual:
~$ sudo nano /etc/httpd/sites-available/vhost2.fedora30.local.conf
Y el contenido podría ser algo así:
<VirtualHost *:80> ServerName vhost2.fedora30.local DocumentRoot /home/usuario/public_html/vhost2.fedora30.local <Directory /home/usuario/public_html/vhost2.fedora30.local> Require all granted </Directory> LogLevel info ErrorLog /var/log/httpd/vhost2.fedora30.local-error.log CustomLog /var/log/httpd/vhost2.fedora30.local-access.log combined </VirtualHost>
Aparte de indicar sus propios nombre de dominio, carpeta de documentos web y archivos de registro, esta configuración es idéntica a la del servidor virtual anterior, excepto por la inclusión de la directiva Require, ya que por defecto Apache no permite servir documentos fuera de /var/www/, y en este caso pretendemos hacer justamente eso.
Sólo nos quedaría realizar el enlace para activar la configuración:
~$ sudo ln -s /etc/httpd/sites-available/vhost2.fedora30.local.conf /etc/httpd/sites-enabled/vhost2.fedora30.local.conf
Hay que recargar la configuración de Apache:
~$ sudo systemctl reload httpd
Es hora de comprobar nuestros nuevos servidores virtuales. Accederé al servidor Fedora a través de su dirección IP, del dominio fedora30.local, que apunta al servidor pero no tiene servidor virtual configurado, y a través de vhost1.fedora30.local y vhost2.fedora30.local, cuyos servidores virtuales acabamos de configurar:

Si analizamos los resultados:
- Para los accesos a través de dirección IP y del dominio que no tiene un servidor virtual asociado, Apache muestra la web por defecto.
- El servidor virtual cuyos archivos están en /var/www/, también funciona correctamente.
- Pero para el dominio cuyos archivos web están en la carpeta del usuario… ¡No funciona! ¿Qué está pasando?
Configurar SELinux en Fedora para Apache
Aunque preventivamente indicamos una directiva Require en el archivo de configuración del servidor virtual para permitir el acceso fuera de /var/www/, esta configuración sólo atañe a Apache.
Fedora es un sistema que viene con la seguridad mejorada SELinux activada por defecto. Esta seguridad, entre otras muchas cosas, no permite realizar determinadas acciones con los archivos del sistema según el contexto.
En este caso, SELinux no tiene problemas en que Apache sirva archivos web desde /var/www/, pero cuando intentamos servirlos desde /home/usuario/ la cosa cambia, ya que este contexto no es aceptado por defecto.
La solución pasa por cambiar el contexto de los archivos web del usuario, mediante el comando chcon:
~$ sudo chcon -Rv --type httpd_sys_content_t /home/usuario/public_html/
Aplicando el cambio de contexto a la carpeta ~/public_html/ SELinux aceptará que su contenido sea servido por Apache.
Sólo nos queda un pequeño detalle, y es que Fedora crea las carpetas de usuario dentro de /home/ con permisos 700, por lo que el resto de usuarios del sistema, Apache incluido, no tienen permiso de lectura de archivos y ejecución de directorios.
Cambiamos los permisos de lectura y acceso a 705:
~$ chmod 705 ~
Se sobreentiende que ~/public_html/ y su contenido sí se han creado con acceso para terceros, en caso contrario también habría que conceder permisos.
Y ahora podemos volver a comprobar el comportamiento de Apache y los servidores virtuales sin necesidad de reiniciar o recargar:

Ahora tú decides qué enfoque seguir: trabajar en /var/www/ o realizar configuraciones adicionales.
Configurar seguridad SSL de Apache en Fedora 30
Para trabajar mediante HTTPS con Apache en Fedora necesitamos:
- Apache trabajando con el módulo SSL.
- Un certificado SSL para el dominio que queramos usar.
- Configurar el servidor virtual que se ocupa del dominio correspondiente.
Cómo cargar módulos de Apache en Fedora
Normalmente Apache no viene compilado con la seguridad SSL incluida, sino que esta funcionalidad se puede incluir como módulo independiente.
Además, en las instalaciones básicas de Apache este módulo no se instala junto con el servidor, por lo que necesitaremos descargarlo e instalarlo con yum:
~$ yum -y install mod_ssl
Ya tenemos instalado el módulo SSL. Dentro del directorio /etc/httpd/conf.modules.d/ tenemos un archivo 00-ssl.conf que incluye la directiva de carga del módulo. Como la configuración general de Apache carga las configuraciones de todos los archivos presentes en /etc/httpd/conf.modules.d/, el módulo cargará. Pero eso ocurrirá en el próximo reinicio del servicio httpd:
~$ sudo systemctl restart httpd
Configuración para usar certificados SSL
Los servidores virtuales configurados hasta ahora usan el protocolo HTTP (puerto 80), pero ahora vamos a configurar uno de ellos para que use el protocolo HTTPS (puerto 443).
La configuración es muy sencilla, basta con editar el archivo de configuración del servidor virtual y añadir un segundo bloque VirtualHost que escuche en el puerto 443. Además de cambiar el puerto, hay que añadir las directivas que cargarán los certificados SSL desde las rutas donde los tengamos instalados.
Podemos copiar el primer bloque y hacer los cambios necesarios:
<VirtualHost *:80> ServerName vhost1.fedora30.local DocumentRoot /home/usuario/public_html/vhost1.fedora30.local <Directory /home/usuario/public_html/vhost1.fedora30.local> Require all granted </Directory> LogLevel info ErrorLog /var/log/httpd/vhost1.fedora30.local-error.log CustomLog /var/log/httpd/vhost1.fedora30.local-access.log combined </VirtualHost> <VirtualHost *:443> ServerName vhost1.fedora30.local DocumentRoot /home/usuario/public_html/vhost1.fedora30.local <Directory /home/usuario/public_html/vhost1.fedora30.local> Require all granted </Directory> SSLEngine on SSLCertificateFile /etc/letsencrypt/live/vhost1.fedora30.local/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/vhost1.fedora30.local/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/vhost1.fedora30.local/chain.pem LogLevel ssl:warn ErrorLog /var/log/httpd/vhost1.fedora30.local-error.log CustomLog /var/log/httpd/vhost1.fedora30.local-access.log combined </VirtualHost>
Como puedes ver, la configuración de los dos bloques es prácticamente igual, salvo que una es para el puerto 80 y otra para el puerto 443, y que el segundo bloque activa el módulo SSL cargando los certificados SSL y configura su propio nivel de registro de eventos (LogLevel).
Obviamente, en tu sistema tendrás que cambiar las rutas de las carpetas de archivos web y de los certificados SSL para tus dominios.
Como cualquier otro cambio en la configuración de servidores virtuales, tras guardar los cambios recargamos la configuración de Apache.
Y por fin podremos acceder al servidor Fedora indicando https:// en lugar de http:// en la barra de direcciones del navegador:

Justo como queríamos.
Conclusión
Ahora que ya sabes cómo instalar Apache en Fedora 30 ya puedes empezar a alojar páginas y aplicaciones web en tu servidor Fedora. Podrás alojar tantos como desees y mantenerlos separados gracias a los servidores virtuales de Apache.
¡Apoya este sitio!
¿Feliz porque ya sabes instalar Apache en Fedora? ¿Te has ahorrado un dolor de cabeza configurando Apache? ¿Has ganado en tu pelea con el firewall y la seguridad SELinux de Fedora? Quizás estés tan satisfecho con esta guía que quieras agradecérnoslo con una mínima contribución para el mantenimiento de este sitio, y puedes hacerlo…
Invitándome a un café:
O dejando una propina en PayPal:
¡Gracias!