En esta entrada explicaremos cómo instalar Nginx en Fedora 35 (y versiones anteriores) paso a paso, un servidor web cada día más usado en Internet, de modo que puedas mostrar sitios web de desde tu servidor o VPS Fedora.
Contenido
Antes de instalar Nginx en Fedora 35
Si tienes intención de seguir los pasos de esta guía de instalación de Nginx en Fedora 35, basta con cumplir estos mínimos requerimientos:
- Un sistema Fedora 35, 34 ó 33 actualizado.
- Acceso a línea de comandos con un usuario con privilegios de sudo, o con root.
- Conexión a Internet.
Cómo instalar Nginx en Fedora 35
Puesto que vamos a instalar Nginx en Fedora 35 desde los repositorios de la distribución, es importante realizar una actualización de las listas de paquetes disponibles:
~$ sudo yum update
El paquete que necesitamos en nginx, que instalaremos con yum:
~$ sudo yum install -y nginx
Finalizada la descarga e instalación de Nginx, se crea un nuevo servicio en Fedora 35, el servicio nginx.service o nginx si prefieres el nombre corto, pero este servicio no queda en ejecución ni habilitado, por lo que debemos hacer manualmente estas tareas.
Para arrancar por primera vez Nginx en Fedora 35, usaremos la opción start del comando systemctl:
~$ sudo systemctl start nginx
Y para que Nginx inicie automáticamente en cada arranque de Fedora 35, habilitamos el servicio con la opción enable:
~$ sudo systemctl enable nginx
Podemos comprobar el estado de servicio en cualquier ocasión con el comando systemctl status nginx
:
Versión de Nginx instalada en Fedora 35
Si necesitas saber qué versión de Nginx usas en Fedora 35 puedes saberlo lanzando el comando nginx -v
:
~$ nginx -v nginx version: nginx/1.20.2
Configurar el firewall de Fedora 35 para Nginx
En el caso de tener activado el firewall de Fedora 35, que es la opción por defecto, si queremos permitir acceso desde red a Nginx tendremos que añadir excepciones.
Para el servicio HTTP, que utiliza en puerto TCP 80:
~$ sudo firewall-cmd --permanent --add-service=http
Y para el servicio cifrado HTTPS, que trabaja con el puerto TCP 443:
~$ sudo firewall-cmd --permanent --add-service=https
Estos ajustes no entrarán en servicio hasta que se recargue la configuración del firewall:
~$ sudo firewall-cmd --reload
Acceder a Nginx en Fedora 35
Para acceder a Nginx en Fedora 35 desde un navegador y obtener la página web del sitio por defecto utilizaremos como URL la dirección IP, dominio, nombre DNS del servidor Fedora 35 si accdemos desde red, o http://127.0.0.1 ó http://localhost si accedemos localmente.
Por ejemplo, la máquina Fedora 35 sobre la que desarrollamos este tutorial es accesible en el subdominio fedora.local.lan, así que será http://fedora.local.lan la URL que utilicemos:
Cómo configurar Nginx en Fedora 35
Para configurar Nginx en Fedora 35 trabajaremos sobre sus archivos de configuración, que se encuentran organizados bajo la ruta /etc/nginx/, siendo el archivo principal nginx.conf, que además incluye otros archivos de forma explícita o especificando subdirectorios desde los que se cargarán los archivos presentes.
Vamos a crear un subdirectorio específico para guardar las configuraciones de servidores virtuales:
~$ sudo mkdir /etc/nginx/sites.d
Para que Nginx tenga en cuenta los archivos presentes en el nuevo subdirectorio, editaremos el archivo principal, nginx.conf:
~$ sudo nano /etc/nginx/nginx.conf
Al final del archivo, justo antes de la llave de cierre, añadimos la siguiente directiva include:
... include /etc/nginx/sites.d/*.conf; }
Para aplicar estos ajustes recargamos la configuración del servicio Nginx:
~$ sudo systemctl reload nginx
Veremos más detalles de configuración de Nginx en Fedora 35 en los siguientes casos prácticos.
Cómo configurar servidores virtuales de Nginx en Fedora 35
Antes de configurar nuevos servidores virtuales de Nginx hay que saber que el sitio web por defecto que acabamos de probar es también un servidor virtual, configurado en un bloque server dentro del archivo de configuración principal nginx.conf.
Limpiando un poco el contenido de este archivo, la configuración del servidor virtual por defecto sería esta:
... server { listen 80; listen [::]:80; server_name _; root /usr/share/nginx/html; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } } ...
El contenido de este bloque server es bastante intuitivo, pero podemos resumir brevemente los principales puntos:
- Las directivas listen indican en qué puerto se escuchan las peticiones, que para el acceso HTTP es el 80, siendo una directiva para el protocolo IPv4 y otro para el IPv6.
- server_name indica a qué dominios atiende este servidor virtual, pero al tratarse del servidor por defecto atenderá cualquier petición que no pueda ser procesada por otro servidor virtual.
- root indica la ruta de la carpeta de documentos del sitio web.
- include se ocupa de cargar otros archivos de configuración, en este caso los procedentes del subdirectorio default.d/, siempre que tengan la extensión *.conf.
- error_page permite configurar una página web personalizada.
- location es un bloque que permite añadir configuraciones aplicables sólo a la ruta indicada.
Sabiendo cómo funcionan los servidores virtuales vamos a crear alguno más.
Dominios
Para poder configurar distintos servidores virtuales sobre Nginx es preciso disponer de distintos dominios apuntando al mismo servidor Fedora 35. En el caso de un servidor o VPS en Internet, deberemos registrar y configurar estos dominios a través de servicios profesionales como Namecheap, el servicio que usamos en comoinstalar.me.
En el caso de redes locales, los dominios deberían estar configurados en los correspondientes servidores DNS.
Como ejemplo, en este artículo crearemos un nuevo servidor virtual para el dominio fedoramania.lan, debidamente configurado, de modo que al acceder al servidor Fedora 35 con el dominio principal o este dominio adicional obtendremos el sitio web por defecto:
Configuración
Antes de crear la configuración de nuevos servidores virtuales conviene preparar la carpeta que alojará los archivos del sitio web, y un buen sitio podría ser, al igual que el servidor por defecto, bajo la ruta /usr/share/nginx/:
~$ sudo mkdir /usr/share/nginx/fedoramania.lan
Crearemos el contenido mínimo, un archivo index.html, para probar el servidor virtual:
~$ sudo nano /usr/share/nginx/fedoramania.lan/index.html
Cualquier mensaje identificativo servirá:
<h1>Bienvenidos a fedoramania.lan</h1> <small>Servido por Nginx</small>
Guardamos los cambios y cerramos el archivo.
La configuración de los nuevos servidores virtuales de Nginx podría hacerse añadiendo sucesivos bloques server en el archivo principal nginx.conf, pero en lugar de ello los crearemos como archivos independientes dentro del subdirectorio sites.d/ que preparamos en un paso anterior:
~$ sudo nano /etc/nginx/sites.d/fedoramania.lan.conf
Para el servidor virtual encargado del dominio fedoramania.lan podríamos crear esta configuración:
server { listen 80; listen [::]:80; server_name fedoramania.lan; root /usr/share/nginx/fedoramania.lan; }
Cualquier ajuste que no se especifique en este bloque server se tomará de la configuración por defecto.
Guardados los cambios, recargamos la configuración de Nginx para aplicarlos:
~$ sudo systemctl reload nginx
Podemos probar de nuevo el acceso a los distintos dominios:
Ahora el dominio fedoramania.lan es gestionado por su propio servidor virtual, mientras que cualquier otro dominio que apunte al servidor Fedora 35 será atendido por el servidor por defecto.
Configuración SSL para Nginx en Fedora 35
Si queremos ofrecer contenido web mediante conexiones seguras, será preciso configurar el acceso SSL para Nginx en Fedora 35 mediante el protocolo seguro HTTPS y los correspondientes certificados.
En el caso de un servidor o VPS Fedora destinado a ofrecer el servicio en Internet es importante trabajar con certificados firmados por autoridades certificadoras, como los que ofrecen servicios profesionales como Namecheap.
Para servidores en pruebas o redes locales pueden bastarte certificados autofirmados generados en el mismo servidor Fedora 35.
En el caso del servidor por defecto, la configuración SSL se encuentra también en el archivo nginx.conf, dentro de un bloque server desactivado:
... # Settings for a TLS enabled server. # # server { # listen 443 ssl http2; # listen [::]:443 ssl http2; # server_name _; # root /usr/share/nginx/html; # # ssl_certificate "/etc/pki/nginx/server.crt"; # ssl_certificate_key "/etc/pki/nginx/private/server.key"; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 10m; # ssl_ciphers PROFILE=SYSTEM; # ssl_prefer_server_ciphers on; # # # Load configuration files for the default server block. # include /etc/nginx/default.d/*.conf; # # error_page 404 /404.html; # location = /40x.html { # } # # error_page 500 502 503 504 /50x.html; # location = /50x.html { # } # } ...
Activando la configuración mínima podría quedar algo así:
... server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name _; root /usr/share/nginx/html; ssl_certificate "/etc/pki/tls/certs/fedora.local.lan.crt"; ssl_certificate_key "/etc/pki/tls/private/fedora.local.lan.key"; ssl_session_cache shared:SSL:1m; ssl_session_timeout 10m; ssl_ciphers PROFILE=SYSTEM; ssl_prefer_server_ciphers on; # # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } } ...
La diferencias con el bloque server que gestiona el servidor por defecto para HTTP son:
- Las directivas listen indican el puerto estándar para conexiones cifradas HTTPS, el 443, y se activa el cifrado añadiendo el parámetro ssl.
- Las directivas ssl_certificate y ssl_certificate_key indican las rutas a la clave privada con que se cifra la conexión y al certificado público, respectivamente. Hemos cambiado en el bloque de configuración anterior estas rutas porque indican ubicaciones y archivos que no existen.
- El resto de directivas SSL ajustan ciertos valores del sistema de cifrado.
Podemos modificar las rutas de las directivas ssl_certificate y ssl_certificate_key para que apunten a la ubicación de nuestros certificados o, si no disponemos de certificados firmados podemos crear certificados autofirmados:
~$ sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -out /etc/pki/tls/certs/fedora.local.lan.crt -keyout /etc/pki/tls/private/fedora.local.lan.key
Se nos solicitará información adicional para incorporarla al certificado público, siendo el valor más importante el de «Common Name«, que debería ser el dominio al que asociamos los certificados y el servidor virtual:
... Country Name (2 letter code) [XX]:ES State or Province Name (full name) []: Locality Name (eg, city) [Default City]: Organization Name (eg, company) [Default Company Ltd]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) []:fedora.local.lan Email Address []: ...
En cualquier caso, con los certificados (firmados o autofirmados) instalados y la configuración actualizada, será necesario recargar la configuración del servicio Nginx.
Accederemos de nuevo al sitio web, pero usando https:// en lugar de http:// al comienzo de la URL. En el ejemplo de este tutorial ahora sería https://fedora.local.lan la URL a probar:
En el caso de haber usado certificados autofirmados el navegador no podrá comprobar la autenticidad de los mismos, por lo que mostrará un aviso. Normalmente el navegador permitirá de algún modo confirmar que entendemos la situación y queremos continuar con el acceso.
Accederemos a la versión cifrada del sitio web, aunque si se están usando certificados autofirmados el navegador seguirá indicándolo de alguna forma.
Para activar el cifrado SSL en un servidor virtual adicional el proceso será aún más sencillo, ya que sólo habrá que añadir algunas directivas extra a la configuración actual, incluso dentro del mismo bloque server. En el caso del ejemplo que hemos realizado en este tutorial, una vez creado el certificado SSL para el dominio correspondiente, la configuración podría quedar así:
server { listen 80; listen [::]:80; listen 443 ssl http2; listen [::]:443 ssl http2; ssl_certificate /etc/pki/tls/certs/fedoramania.lan.crt; ssl_certificate_key /etc/pki/tls/private/fedoramania.lan.key; server_name fedoramania.lan; root /usr/share/nginx/fedoramania.lan; }
Con la configuración de Nginx actualizada, y con la salvedad del uso de certificados autofirmados, podemos visitar las versiones cifradas de todos los servidores virtuales de Nginx de nuestra máquina Fedora 35:
Servir contenido desde los directorios de usuario con Nginx en Fedora 35
Es posible, sobre todo en ambientes con varios usuarios, querer que Nginx pueda servir contenido web desde el directorio personal de nuestro usuario de Fedora 35, para facilitar la gestión de los archivos sin tener que usar sudo, por ejemplo.
En este caso podríamos crear una carpeta htdocs, public_html o el nombre que prefieras en tu directorio personal:
~$ mkdir public_html
Un primer problema con el que nos encontramos es que el directorio personal sólo tiene permisos de acceso exclusivo para el propietario, ni siquiera los tiene para el grupo:
~$ ls -l .. total 0 drwx------. 5 chacho chacho 128 ago 19 15:03 instalador
Por tanto tendríamos que permitir lectura y ejecución para terceros u otros usuarios, donde se incluiría el usuario nginx:
~$ chmod o+rx .
Si consultamos los permisos de nuevo, veremos que ahora sí otros usuarios podrán acceder a nuestro directorio personal en modo lectura:
~$ ls -l .. total 0 drwx---r-x. 5 chacho chacho 128 ago 19 15:03 instalador
Sólo nos faltará definir con el comando semanage un contexto de lectura para el servicio web en la carpeta que acabamos de crear, así que nos aseguraremos de disponer de semanage instalando el paquete policycoreutils-python-utils si no lo tenemos ya:
~$ sudo yum install -y policycoreutils-python-utils
Definimos el contexto:
~$ sudo semanage fcontext -a -t httpd_sys_content_t "/home/instalador/public_html(.*)?"
Y lo aplicamos con restorecon:
~$ sudo restorecon /home/instalador/public_html/
Desde este momento puedes crear contenido dentro de ./public_html/, para un solo sitio o para varios organizados en subdirectorios, especificando correctamente el valor de la directiva root en los archivos de configuración de Nginx; por ejemplo:
... root /home/instalador/public_html/sitio1; ...
Conclusión
Ahora que sabes cómo instalar y configurar Nginx en Fedora 35 ya puedes ofrecer contenido web para distintos dominios y con conexiones seguras desde tu servidor o VPS Fedora 35.
Si tienes alguna pregunta o duda, propuesta de mejora del artículo, crees que necesita actualización o quieres notificar un posible error, deja un comentario y le echo un vistazo lo antes posible.
¡Apoya comoinstalar.me!
¿Ya estás listo para poner en línea tu sitio web gracias a esta guía de instalación y configuración de Nginx en Fedora 35? Si es así y te apetece agradecérnoslo, puedes ayudar al mantenimiento de este sitio y a la creación de más artículos sobre Fedora 35 y Nginx dejando 1 $ de propina en PayPal:
O, si te sientes especialmente agradecido, invitándonos a un café:
¡Gracias!
Actualizado a la versión 1.20.2 en Fedora 35.
Hola. Estos fueron los resultados.
«Hmm. Estamos teniendo problemas encontrando ese sitio.
No podemos conectarnos al servidor en http://www.fedoramania.lan.
Si esa dirección es correcta, aquí hay otras tres cosas que puede probar:
Pruebe más tarde.
Verifique su conexión a Internet.
Si está conectado a través de un firewall, verifique que Firefox tiene permisos para acceder a la Web.»
Hola. Sólo es posible configurar servidores virtuales si los dominios correspondientes se pueden resolver a la dirección IP del servidor sobre el que estamos trabajando. Es decir, ese dominio que has probado es un dominio local de mi propia red, tú deberías probar con dominios que se puedan resolver como tu servidor, si es que hay alguno.
¿Cómo instalar en home directory?
403 Forbidden
nginx/1.18.0
¡Hola, Tito! Se trata de un tema de permisos de acceso y SELinux. Acabo de añadir la configuración necesaria al final del artículo, échale un vistazo.