Cómo configurar la terminación Varnish SSL con el servidor web Nginx en Rocky Linux 8

Configurar la terminación Nginx SSL para Varnish Web Cache

El software de caché Varnish no es compatible con SSL/TLS de forma predeterminada. Necesita software adicional para habilitar la compatibilidad con SSL/TLS en Varnish.

Terminación SSL es un método para habilitar SSL/TLS en Varnish. Puede usar Hitch, Nginx o Apache para habilitar la terminación SSL para el acelerador HTTP Varnish.

El software de terminaci√≥n de SSL se ejecutar√° en el HTTPS Puerto ‘443‘ y maneja todas las solicitudes HTTPS de los clientes. Despu√©s de eso, todas las solicitudes se reenviar√°n al software de cach√© de barniz y luego se reenviar√°n al servidor back-end de origen.

Requisitos previos

En este artículo, aprenderá a configurar Varnish SSL Termination con el servidor web Nginx.

Antes de comenzar, aseg√ļrese de cumplir con los siguientes requisitos:

  • Un servidor Linux con Varnish instalado.
  • Privilegios de ra√≠z
  • un nombre de dominio

Para este ejemplo, estamos usando el servidor Rocky Linux con Varnish instalado encima. Y usaremos el nombre de dominio ‘example.io’.

Ahora empecemos.

Instalación del servidor web Nginx

Si est√° utilizando Nginx como backend de Varnish, omita este primer paso.

En este primer paso, instalar√° Nginx en el sistema Linux.

1. Para la distribución basada en Debian/Ubuntu, ejecute el siguiente comando apt para instalar el servidor web Nginx.

sudo apt install nginx -y

2. Para el sistema operativo CentOS/RockyLinux/AlmaLinux, ejecute el siguiente comando DNF para instalar el servidor web Nginx.

sudo dnf install nginx -y

3. Una vez completada la instalación de Nginx, inicie y habilite el servidor web de Nginx con el siguiente comando.

sudo systemctl enable --now nginx

Si tienes un error, déjalo. Configurará Nginx en el siguiente paso.

Generar SSL con Certbot

En este paso, instalar√° la herramienta cerbot y generar√° certificados SSL de Letsencrypt para el dominio ‘example.io’.

1. Primero, agregue los puertos HTTP y HTTPS al firewall del sistema.

Para sistemas Debian/Ubuntu, ejecute el siguiente comando ufw para abrir puertos HTTP y HTTPS.

sudo ufw allow http
sudo ufw allow https
sudo ufw reload

Para los sistemas CentOS/RockyLinux/AlmaLinux, ejecute el comando firewall-cmd a continuación.

sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent
sudo firewall-cmd --reload

2. A continuación, instale la herramienta certbot con el siguiente comando.

Instale la herramienta certbot en los sistemas Debian/Ubuntu usando el comando apt a continuación.

sudo apt install certbot -y

Instale la herramienta certbot en los sistemas CentOS/RockyLinux/AlmaLinux usando el comando DNF a continuación.

sudo dnf install certbot -y

3. Antes de generar SSL Letsencrypt, detenga el servicio Varnish que se ejecuta en el puerto HTTP predeterminado.

sudo systemctl stop varnish
sudo systemctl stop nginx

4. Ahora ejecute el siguiente comando certbot para generar SSL Letsencrypt. Y aseg√ļrese de cambiar el nombre de dominio y la direcci√≥n de correo electr√≥nico.

sudo certbot certonly --agree-tos --email [email protected] --standalone --preferred-challenges http -d example.io

Una vez que se complete el proceso de certbot, su certificado estar√° disponible en el directorio ‘/etc/letsencrypt/live/DOMAIN.COM/’.

El certificado ‘fullchain.pem’ es su clave p√ļblica SSL y ‘privkey.pem’ es su clave privada SSL.

Configurar puerto Nginx predeterminado

Omita este paso si est√° utilizando el servidor web Nginx como backend para su acelerador HTTP Varnish.

Si est√° utilizando otro servidor web back-end, debe configurar el puerto predeterminado para Nginx.

1. Edite la configuración de nginx predeterminada con el editor nano.

sudo nano /etc/nginx/nginx.conf

En la secci√≥n predeterminada ‘servidor {… }’, cambie la opci√≥n ‘escuchar’ al puerto ‘8081’ como se muestra a continuaci√≥n.

....

server {
listen       8081 default_server;
listen       [::]:8081 default_server;

…trim…
}

….


Guarde la configuración y salga.

2. Ahora reinicie el servicio Nginx para aplicar una nueva configuración.

sudo systemctl restart nginx

El servicio Nginx predeterminado ahora se ejecuta en el puerto ‘8081’.

Configurar la terminación SSL con el servidor web Nginx

Para configurar la terminaci√≥n SSL con Nginx, debe crear una nueva configuraci√≥n de bloques de host/servidor virtual que se ejecutar√° en el puerto HTTPS ‘443’.

Este host virtual maneja todas las solicitudes HTTPS de los clientes y reenvía todas las solicitudes al acelerador Varnish HTTP.

1. Cree una nueva configuración de bloque de servidor Nginx con el siguiente comando.

Si est√° utilizando el sistema basado en Debian/Ubuntu, cree una nueva configuraci√≥n ‘/etc/nginx/sites-disponible/example.io’.

sudo nano /etc/nginx/sites-available/example.io

Para el sistema CentOS/RockyLinux/AlmaLinux, cree una nueva configuraci√≥n ‘/etc/nginx/conf.d/example.conf’.

sudo nano /etc/nginx/conf.d/example.conf

Copie y pegue la siguiente configuraci√≥n. Y aseg√ļrese de cambiar el nombre de dominio y la ruta de los certificados SSL.

server {

listen 443 ssl http2;
server_name example.io;
ssl_certificate           /etc/letsencrypt/live/exmaple.io/fullchain.pem;
ssl_certificate_key       /etc/letsencrypt/live/example.io/privkey.pem;

ssl_session_cache  builtin:1000  shared:SSL:10m;
ssl_protocols TLSv1.2;
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
ssl_prefer_server_ciphers on;

access_log            /var/log/nginx/example.io_access.log;
error_log             /var/log/nginx/example.io_error.log;

location / {
proxy_pass http://127.0.0.1:80;
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 https;
proxy_set_header X-Forwarded-Port 443;
proxy_set_header Host $host;
}

}


Guarde la configuración y salga.

2. A continuación, para el sistema Debian/Ubuntu, active la configuración del bloque del servidor con el siguiente comando.

sudo ln -s /etc/nginx/sites-available/example.io /etc/nginx/sites-enabled/

3. Ahora ejecute el siguiente comando para verificar la configuración de Nginx, luego reinicie el servicio de Nginx para aplicar la nueva configuración.

sudo nginx -t
sudo systemctl restart nginx

4. Ahora verifique el servicio Nginx y el puerto HTTPS ‘443’ usando el siguiente comando.

Verifique el estado del servicio Nginx usando el siguiente comando systemctl.

sudo systemctl status nginx

Aseg√ļrese de que el servicio Nginx est√© activo y en ejecuci√≥n.

Configurar la terminación Nginx SSL para Varnish Web Cache

Verifique el puerto HTTPS ‘443’ en su sistema usando el comando ss a continuaci√≥n.

ss -antpl | grep 443

Aseg√ļrese de que el puerto HTTPS ‘443’ est√© en estado ‘ESCUCHAR’.

LISTEN 0      128          0.0.0.0:443        0.0.0.0:*    users:(("nginx",pid=4787,fd=8),("nginx",pid=4786,fd=8),("nginx",pid=4785,fd=8))

Ahora ha completado la configuración básica de terminación SSL con el servidor web Nginx.

HTTP a HTTPS autom√°tico con Varnish

En este paso, configurar√° Varnish para redirigir autom√°ticamente HTTP al protocolo HTTPS. Esto se puede lograr creando una nueva regla Varnish en la configuraci√≥n ‘default.vcl’.

1. Edite la configuraci√≥n de barniz ‘/etc/varnish/default.vcl’ usando el editor nano.

nano /etc/varnish/default.vcl

Copie y pegue la siguiente configuraci√≥n dentro de la opci√≥n ‘sub vcl_recv { … }’. Y aseg√ļrese de cambiar el nombre de dominio con su dominio.

sub vcl_recv {

…trim…

if (client.ip != ¬ę127.0.0.1¬Ľ && req.http.host ~ ¬ęexample.io¬Ľ) {
set req.http.x-redir = ¬ęhttps://example.io¬Ľ + req.url;
return(synth(850, ¬ę¬Ľ));
}

…trim…
{


A continuaci√≥n, agregue la siguiente configuraci√≥n al final de la l√≠nea. Esto determinar√° el m√©todo de redireccionamiento a HTTP ‘301’.

sub vcl_synth {
    if (resp.status == 850) {
       set resp.http.Location = req.http.x-redir;
       set resp.status = 301;
       return (deliver);
    }
}

Guarde la configuración de barniz y salga.

2. Luego, reinicie el servicio Varnish para aplicar una nueva configuración usando el siguiente comando.

sudo systemctl restart varnish

Y ha completado la redirección automática de HTTP y HTTPS utilizando la regla Varnish.

Verifique la terminación SSL de Varnish

Para probar la terminación Varnish SSL, puede usar el navegador web o usar el comando curl.

1. Abra su navegador web y escriba su nombre de dominio en la barra de direcciones. Para este ejemplo, estamos usando el navegador web Firefox.

http://ejemplo.io

Ser√° redirigido autom√°ticamente al protocolo HTTPS.

Haga clic derecho en la p√°gina web y haga clic en el men√ļ ‘Inspeccionar’.

Vaya a la pesta√Īa ‘Red’ y haga clic en el bot√≥n ‘Recargar’.

Haga clic en la solicitud de URL raíz y verá un resultado similar al que se muestra a continuación.

Verificar barniz SSL/TLS

La solicitud a http://example.io se redirige autom√°ticamente al protocolo HTTPS https://example.io con el c√≥digo de estado ‘301’.

El servidor Varnish maneja todas las solicitudes de los clientes.

2. Para verificar la terminación de Varnish SSL con curl, use el siguiente comando.

curl -I http://example.io

Verá un encabezado HTTP detallado como se muestra a continuación.

Verificar barniz SSL TLS

La solicitud se redirige al protocolo HTTPS ‘https://example.io’ con el c√≥digo de estado HTTP ‘301’. El servidor de barniz maneja todas las solicitudes de los clientes.

Conclusión

¡Felicidades! Ha aprendido la configuración de Varnish SSL Termination con el servidor web Nginx.

Además, aprendió el comando básico de certbot para generar SSL Letsencrypt gratuito y la regla de barniz básica para redirigir automáticamente de HTTP a HTTPS.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *