Saltar a contenido

Desplegado de NGINX

Para comunicar el exterior con nuestro servidor interno de Wordpress, tendremos que configurar NGINX como proxy inverso. Este se configurará en modo de alta disponibilidad para poder clonar el servidor wordpress1 en el futuro y que nginx pueda acceder a los dos simultáneamente.

Instalación

Tendremos que utilizar el siguiente comando para instalar el proxy inverso:

sudo apt update && sudo apt install -y nginx

Una vez instalado, podremos comprobar que este y el redireccionamiento DNAT están funcionando correctamente accediendo a la dirección del servidor desde cualquier navegador:

Servicio de nginx activado.

Servicio de nginx activado.

Funcionamiento correcto de nginx.

Funcionamiento correcto de nginx.

Configuración

Certificados TLS

Algo importante que tendremos que tener en cuenta al configurar nginx será la seguridad de las comunicaciones, para esto crearemos un certificado TLS autofirmado que nos permitirá asegurar que ninguna de las peticiones a nuestro servidor se realice de manera insegura.

Note

Para generar el certificado TLS se utilizaron los siguientes recursos:

Podemos generar la llave privada y pública con el siguiente comando, a la cuál tendremos que proporcionar los datos de nuestra empresa:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:4096 \
-keyout /etc/ssl/private/clearfrost-autofirmado.key \
-out /etc/ssl/certs/clearfrost-autofirmado.crt \
-subj "/C=ES/ST=Comunidad Valenciana/L=Mislata/O=ClearFrost SL/OU=ClearFrost/CN=clearfrost.es" \
-addext "subjectAltName=DNS:clearfrost.es,DNS:*.clearfrost.es"

Con el certificado TLS listo, podemos comenzar la configuración del VirtualHost en sí.

Warning

Es importante que en la sección Common Name / CN se introduzca el nombre de dominio con el que se accederá al servidor, si existe un desajuste entre el dominio del certificado generado y el dominio con el que se acceda al servidor, se producirá un error al intentar acceder a este.

Para proteger también cualquier subdominio junto al dominio raíz, podemos utilizar los parámetros subjectAltName para incluir una lista de nombres DNS a los que se les aplica el certificado.

VirtualHost

Con los certificados generados, ahora tenemos que definir el archivo de host virtual dentro de /etc/nginx/sites-enabled/. Este definirá nuestro sitio web ante nginx, el cual puede ser visto a continuación:

upstream wordpress {
    server wordpress1.pve1.fpmislata.fp:8080;
    #server wordpressclon1.pve1.fpmislata.fp:8080;
}

server {
  server_name clearfrost.es www.clearfrost.es;

  listen 443 ssl;

  ssl_certificate /etc/ssl/certs/clearfrost-autofirmado.crt;
  ssl_certificate_key /etc/ssl/private/clearfrost-autofirmado.key;

  location / {
    proxy_pass https://wordpress/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
  }
}

Como se puede ver, hemos decidido preparar en adelantado una configuración de alta disponibilidad ya que tenemos planeado clonar el servidor Wordpress para que los dos puedan ofrecer sus servicios al mismo tiempo.

Note

En la configuración de alta disponibilidad se está manteniendo comentada la entrada del servidor secundario para no interferir con la instalación y configuración del servidor primario.


Otro aspecto importante a tener en cuenta es que para evitar errores en la instalación y uso de Wordpress, tenemos que hacer uso de los parámetros proxy_set_header para que Wordpress reciba la información correcta sobre el nombre de dominio con el que accedemos a este.

Además, el servidor hace uso de los certificados autofirmados creados en el anterior paso. Aunque como no tenemos todavia el servidor XAMPP/Wordpress instalado, este bloque server no funcionará hasta entonces. Para remediar esto podemos crear otro bloque que solo sirva para probar el funcionamiento del proxy inverso (ping.clearfrost.es):

server {
    server_name ping.clearfrost.es;

    listen 443 ssl;

    ssl_certificate /etc/ssl/certs/clearfrost-autofirmado.crt;
    ssl_certificate_key /etc/ssl/private/clearfrost-autofirmado.key;

    root /var/www/html/;
}

Una vez tengamos los dos bloques configurados, podremos realizar una prueba desde nuestra terminal para demostrar su funcionamiento:

Ejecución exitosa de los comandos.

Ejecución exitosa de los comandos.

En la imagen se puede ver como la petición a https://ping.clearfrost.es es exitosa y devuelve la página por defecto de nginx, mientras que la petición a https://clearfrost.es sufre un error "502 Bad Gateway" debido a que el servidor Wordpress no está configurado todavia.

Tip

Para poder redirigir cualquier petición HTTP a la versión HTTPS correspondiente del servidor podemos incluir el siguiente bloque server dentro del mismo archivo:

server {
    listen 80 default_server;
    if ($host = ping.clearfrost.es) {
        return 301 https://$host$request_uri;
    }
    if ($host = clearfrost.es) {
        return 301 https://$host$request_uri;
    }
}

Si probamos a acceder desde nuestro navegador, podremos ver como somos redirigidos al servicio HTTPS del servidor, y podremos comprobar también que los datos utilizados en los certificados son los correctos:

Funcionamiento correcto del certificado TLS.

Funcionamiento correcto del certificado TLS.