Cómo Instalar Nginx en Ubuntu 18.04

Cómo Instalar Nginx en Ubuntu 18.04

En esta entrada vamos a ver cómo instalar Nginx en Ubuntu 18.04 paso a paso. Nginx es una de las alternativas más valoradas en Internet a la hora de poner en funcionamiento un servidor web. El objetivo de esta guía es aprender a instalar y configurar Nginx en Ubuntu con servidores virtuales, soporte de PHP y acceso con protocolo seguro HTTPS mediante SSL.

Antes de instalar Nginx en Ubuntu 18.04

Necesitamos cumplir una serie de requisitos para seguir este tutorial:

  • Un sistema Ubuntu 18.04 actualizado.
  • Poder acceder por terminal con un usuario con permisos de sudo.
  • Conexión a Internet.

Estos requerimientos son mínimos, así que como seguramente ya los cumples (por eso estás leyendo esta entrada) vamos a pasar a la acción.

Cómo instalar Nginx en Ubuntu 18.04

Para instalar Nginx en Ubuntu 18.04 obtendremos los paquetes necesarios desde el repositorio oficial de la distribución, a través del comando apt.

La primera acción será actualizar la información de estos repositorios, e incluso los paquetes ya instalados, que es la práctica habitual antes de instalar nuevo software en el sistema:

~$ sudo apt update && sudo apt -y upgrade

Con el sistema actualizado es el momento de descargar e instalar el paquete nginx junto a todas sus dependencias:

~$ sudo apt -y install nginx

A diferencia de otros sistemas, en Ubuntu la instalación de Nginx queda activada y en funcionamiento de forma automática. Esto lo podemos comprobar con el comando systemctl:

~$ systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2019-07-03 13:45:56 CEST; 48s ago
     Docs: man:nginx(8)
  Process: 886 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
  Process: 885 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
 Main PID: 887 (nginx)
    Tasks: 2 (limit: 525)
   CGroup: /system.slice/nginx.service
           ├─887 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
           └─888 nginx: worker process

jul 03 13:45:55 ubuntu64 systemd[1]: Starting A high performance web server and a reverse proxy server...
jul 03 13:45:56 ubuntu64 systemd[1]: Started A high performance web server and a reverse proxy server.

Podemos ver que el servicio nginx está activo y funcionando. Aunque seguramente quieres comprobarlo a través de un navegador, accediendo desde la propia máquina Ubuntu o cualquier otra de la red local, mediante dirección IP, dominio, nombre de máquina, etc.

Para esta guía accederé desde otra máquina de la red local mediante el nombre de máquina y dominio configurado durante la instalación de Ubuntu:

como instalar nginx en ubuntu 18.04

Todo funciona como debería. Ahora vamos a aprender a configurar Nginx en Ubuntu.

Cómo configurar Nginx en Ubuntu 18.04

Para configurar Nginx en Ubuntu editaremos los distintos archivos de configuración que se encuentran bajo la ruta /etc/nginx/. Bajo esta ruta existen una serie de archivos de texto organizados en carpetas para manejar cada aspecto de la configuración de Nginx.

El archivo principal es /etc/nginx/nginx.conf.

Servidores virtuales de Nginx en Ubuntu

Para configurar un servidor virtual de Nginx en Ubuntu tendremos que crear un archivo de configuración bajo la ruta /etc/nginx/sites-available/.

Algo importante que debes tener en cuenta es que el servidor por defecto de Nginx en Ubuntu, que ya hemos visto en funcionamiento, es realmente un servidor virtual. Por tanto, tiene su propio archivo de configuración y es /etc/nginx/sites-available/default.

Crearé un servidor virtual adicional para el subdominio vhost.ubuntu64.local. Ten en cuenta que el dominio o subdominio que quieras configurar tiene que estar apuntando a la dirección IP de la máquina Ubuntu que aloja Nginx.

En primer lugar creamos el directorio donde se alojarán los archivos del sitio web. Un buen sitio es bajo la ruta /var/www/:

~$ sudo mkdir -p /var/www/vhost.ubuntu64.local/html

Para no tener que andar todo el tiempo trabajando con sudo, tal vez quieras que estas carpetas pertenezcan a tu usuario:

~$ sudo chown $USER:$USER /var/www/vhost.ubuntu64.local/ -R

Deberíamos añadir algún contenido básico, creando un pequeño archivo index.html que se muestre al acceder al dominio:

~$ nano /var/www/vhost.ubuntu64.local/html/index.html

Puedes añadir cualquier contenido, un simple mensaje de bienvenida servirá:

<h1>Bienvenido a vhost.ubuntu64.local</h1>

Es el momento de empezar a configurar el servidor virtual, creando su archivo de configuración:

~$ sudo nano /etc/nginx/sites-available/vhost.ubuntu64.local

El contenido de este archivo podría ser algo como esto:

server {
        listen 80;
        listen [::]:80;

        root /var/www/vhost.ubuntu64.local/html;

        index index.html index.htm;

        server_name vhost.ubuntu64.local;

        location / {
                try_files $uri $uri/ =404;
        }
}

La configuración se encuentra dentro de un bloque server en el que encontramos estas directivas:

listen

La primera línea es para IPv4 y la segunda para IPv6. Indicamos desde qué interfaz escuchar peticiones y en qué puerto. Al no indicar interfaces de red o direcciones IP se asume que se aceptarán todas las peticiones independientemente de desde qué adaptador de red procedan. El 80 indica el puerto estándar HTTP.

root

La ruta del directorio web de nuestro servidor virtual, que creamos anteriormente.

index

Nombres de archivo que se servirán por defecto si no se indica ninguno en la URL solicitada.

server_name

Dominio o subdominio al que atiende este servidor virtual.

location

Este bloque equivale al Directory de Apache. Dentro de él incluimos ciertas configuraciones que se aplicarán a las rutas relativas del servidor virtual. En el ejemplo, la petición de la URL se trata en primer lugar como fichero, si no existe el fichero se trata como directorio, y si tampoco existe se devolverá un error 404 (no encontrado).

Para que el servidor virtual funcione debemos crear un enlace simbólico de este archivo dentro del directorio /etc/nginx/sites-enabled/:

~$ sudo ln -s /etc/nginx/sites-available/vhost.ubuntu64.local /etc/nginx/sites-enabled/

Y para que entre en funcionamiento hay que recargar la configuración de Nginx:

~$ sudo systemctl reload nginx

Es el momento de probar el nuevo servidor virtual introduciendo su dominio como dirección en el navegador:

servidores virtuales nginx en ubuntu 18.04

Justo lo que esperábamos.

Seguridad SSL de Nginx en Ubuntu 18.04

Hasta ahora hemos trabajado con el protocolo HTTP, pero en cualquier entorno de producción debemos hacerlo con HTTPS para cifrar el tráfico y aportar seguridad a nuestros usuarios.

Necesitamos certificados SSL para el servidor web. Vamos a recurrir a certificados autofirmados para realizar las pruebas en local.

Si no tenemos los certificados Snakeoil, instalamos el paquete ssl-cert:

~$ sudo apt -y install ssl-cert

Ahora con el comando make-ssl-cert creamos certificados autofirmados:

~$ sudo make-ssl-cert generate-default-snakeoil

Y se crearán los certificados autofirmados Snakeoil. Estos certificados se crean para el dominio de la máquina Ubuntu, que es el mismo al que responde la web por defecto de Nginx.

Por tanto, vamos a incorporarlos a la configuración del sitio web por defecto de Nginx en Ubuntu, editando el archivo /etc/nginx/sites-available/default:

...
server {
        listen 80 default_server;
        listen [::]:80 default_server;

        # SSL configuration
        #
        # listen 443 ssl default_server;
        # listen [::]:443 ssl default_server;
        #
        # Note: You should disable gzip for SSL traffic.
        # See: https://bugs.debian.org/773332
        #
        # Read up on ssl_ciphers to ensure a secure configuration.
        # See: https://bugs.debian.org/765782
        #
        # Self signed certs generated by the ssl-cert package
        # Don't use them in a production server!
        #
        # include snippets/snakeoil.conf;

        root /var/www/html;
...

Lo único que hay que hacer es descomentar las dos directivas listen que activan la escucha de conexiones seguras en el puerto 443, y la directiva include que carga la configuración de los certificados autofirmados:

...
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
...
include snippets/snakeoil.conf;
...

Guardados los cambios, recargamos la configuración de Nginx y accedemos al dominio de la máquina Ubuntu, pero indicando https:// en lugar de http://

seguridad ssl nginx en ubuntu 18.04

Dependiendo del navegador que uses recibirás un mensaje de advertencia informando de que la conexión cifrada emplea certificados autofirmados, que no están garantizados por ninguna autoridad certificadora. Utilizando las opciones que nos ofrece el navegador podemos confirmar la excepción de seguridad y acceder a la página web usando HTTPS:

ssl nginx en ubuntu 18.04

Si dispones de certificados firmados por alguna autoridad para el dominio principal o el de algún servidor virtual y los quieres usar, simplemente tienes que añadir las directivas listen para SSL y un par de directivas que indiquen las rutas de los archivos del certificado para el dominio que se trate.

Por ejemplo, si tenemos certificados firmados para el dominio del servidor virtual que configuramos anteriormente, editaríamos su archivo de configuración con estas modificaciones:

...
listen 443 ssl;
listen [::]:443 ssl;
...
ssl_certificate /etc/letsencrypt/live/vhost.ubuntu64.local/cert.pem;
ssl_certificate_key /etc/letsencrypt/live/vhost.ubuntu64.local/privkey.pem;
...

Cómo instalar PHP para Nginx en Ubuntu 18.04

Para instalar PHP en Nginx debemos hacerlo como módulo FastCGI, con dos posibilidades: php-fpm (sockets Unix) o php-cgi (sockets TCP/IP). En esta guía utilizaremos el módulo php-fpm. Usaremos la versión instalada en los repositorios oficiales de Ubuntu (a no ser que tengas otras fuentes instaladas que ofrezcan versiones de PHP alternativas).

Basta solicitar la instalación del módulo php-fpm para que se descarguen todos los componentes y dependencias necesarias:

~$ sudo apt -y install php-fpm

Descargados e instalados todos los paquetes hay que configurar manualmente Nginx para que use PHP.

En primer lugar configuraremos el servidor por defecto editando /etc/nginx/sites-available/default y localizando este bloque location:

# pass PHP scripts to FastCGI server
#
# location ~ \.php$ {
#       include snippets/fastcgi-php.conf;
#
#       # With php-fpm (or other unix sockets):
#       fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
#       # With php-cgi (or other tcp sockets):
#       fastcgi_pass 127.0.0.1:9000;
#}

Debemos eliminar los caracteres # de las líneas que queramos activar, que son el propio bloque location, la directiva include y la directiva fastcgi_pass para php-fpm. En esta línea además debemos hacer un cambio, ya que por defecto aparece el archivo php7.0-fpm.sock y la versión de PHP para Ubuntu 18.04 es la 7.2, por lo que el archivo sería php7.2-fpm.sock:

# pass PHP scripts to FastCGI server
#
location ~ \.php$ {
        include snippets/fastcgi-php.conf;
#
#       # With php-fpm (or other unix sockets):
        fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
#       # With php-cgi (or other tcp sockets):
#       fastcgi_pass 127.0.0.1:9000;
}

Guardados los cambios, recargamos la configuración de Nginx.

Para comprobar el correcto funcionamiento crearemos el archivo /var/www/html/info.php con este contenido:

<?php
        phpinfo();

Accederemos a través del navegador web mediante la dirección IP, nombre de máquina o dominio, etc. añadiendo el sufijo /info.php a la URL, en este ejemplo sería http://ubuntu64.local/info.php

instalar php en nginx para ubuntu 18.04

Y funciona perfectamente, pero sólo para el servidor por defecto.

Si queremos incluir PHP en las funcionalidades de otros servidores virtuales tendremos que añadir un bloque como el siguiente en sus archivos de configuración respectivos:

location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
}

Añadir index.php como archivo por defecto de directorio

Un detalle importante a tener en cuenta es que las aplicaciones web realizadas en PHP usan un archivo índice index.php en lugar de index.html o index.htm.

Por tanto, habrá que añadir index.php a la directiva index del bloque server del archivo de configuración del servidor virtual. Quedaría algo así:

server {
        ...
        index index.php index.html index.htm;
        ...

No olvides recargar la configuración del servicio web después de hacer cambios.

Conclusión

Ahora que sabes cómo instalar Nginx en Ubuntu 18.04 ya puedes aprovechar su reputación de servidor ligero y rápido para montar tus aplicaciones web, sin nada que envidiar o echar en falta con respecto a Apache.

En caso de dudas, sugerencias, notificación de errores, etc. sobre esta guía, déjame un comentario.

¡Apoya este sitio!

El proceso de instalar y configurar Nginx en Ubuntu 18.04 es algo más complicado que con otros servidores web, pero si has llegado hasta aquí ahorrándote algún quebradero de cabeza, quizás quieras agradecérnoslo. Cualquier contribución por mínima que sea con el mantenimiento de este sitio será bien recibida. ¡Gracias!

Valora esta entrada

1 estrella2 estrellas3 estrellas4 estrellas5 estrellas (1 votos, promedio: 5,00 de 5)
Cargando…

Deja un comentario

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies.

ACEPTAR
Aviso de cookies