Cómo configurar la terminación Varnish SSL con el servidor web Nginx en Rocky Linux 8
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 la terminación Varnish SSL con el servidor web Nginx, también conocido como la configuración «varnish nginx ssl».
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, pero si no, su instalación es crucial para la funcionalidad «varnish https».
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 proceso es conocido como «varnish nginx ssl».
Este host virtual maneja todas las solicitudes «varnish 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.
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.
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.
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.