Alijo de barniz carece de soporte nativo para SSL/TLS y otros protocolos asociados con el puerto 443 . Si está utilizando Varnish Cache para aumentar el rendimiento de su aplicación web, debe instalar y configurar otra pieza de software llamada SSL/TLS proxy de terminación, para trabajar junto con Varnish Cache para habilitar HTTPS .
El enganche es un proxy SSL/TLS escalable, gratuito, de código abierto y basado en libev diseñado para Varnish Cache , que actualmente funciona en Linux, OpenBSD, FreeBSD y MacOSX. Termina las conexiones TLS/SSL escuchando en el puerto 443 (el puerto predeterminado para HTTPS conexiones) y reenvía el tráfico sin cifrar a Varnish Cache , sin embargo, también debería funcionar con otros backends.
Es compatible con TLS1.2 y TLS1.3 y TLS 1.0/1.1 heredados , admite ALPN (Negociación de protocolo de capa de aplicación ) y NPN (Negociación del próximo protocolo ) para HTTP/2 , un protocolo PROXY para señalar la IP/puerto del cliente a un servidor, conexiones de socket de dominio UNIX al origen, SNI (Indicación de nombre de servidor ), con y sin certificados comodín. Además, funciona bien para grandes instalaciones que requieren hasta 15 000 tomas de escucha y 500.000 certificados.
Como continuación de nuestros dos artículos anteriores sobre la instalación de Varnish Cache para Nginx y Apache Servidores HTTP, esta guía muestra cómo habilitar HTTPS para caché de barniz usando proxy TLS de enganche en CentOS/RHEL 8 .
Diagrama lógico de nuestra configuración
Esta guía asume que ha instalado Varnish para Nginx o Apache servidor web, de lo contrario, consulte:
- Cómo instalar Varnish Cache 6 para el servidor web Nginx en CentOS/RHEL 8
- Cómo instalar Varnish Cache 6 para el servidor web Apache en CentOS/RHEL 8
Paso 1:Instale Hitch en CentOS/RHEL 8
# dnf install epel-release # dnf install hitch openssl
Instalar Hitch en CentOS 8
Paso 2:Configuración de Varnish Cache para Hitch
Así que abre Varnish systemd archivo de servicio para editar.
# systemctl edit --full varnish
Busque la línea ExecStart y agregue un -a
adicional marca con el valor 127.0.0.1:8443,proxy . Usando un valor de 127.0.0.1:8443 significa que Varnish solo aceptará la conexión interna (de los procesos que se ejecutan en el mismo servidor, es decir, el enganche en este caso), pero no las conexiones externas.
ExecStart=/usr/sbin/varnishd -a :80 -a 127.0.0.1:8443,proxy -f /etc/varnish/default.vcl -s malloc,256m
Establecer puerto de escucha Varnish para enganche
Guarde el archivo y luego reinicie el servicio Varnish para aplicar los últimos cambios.
# systemctl restart varnish
Paso 3:Obtención de certificados SSL/TLS
Para crear un certificado autofirmado (que solo debe usar en un entorno de prueba local), puede usar OpenSSL herramienta.
# mkdir /etc/ssl/tecmint.lan # cd /etc/ssl/tecmint.lan/ # openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tecmint.lan.key -out tecmint.lan.crt
Luego cree un paquete del certificado y la clave de la siguiente manera.
# cat tecmint.crt tecmint.key >tecmint.pem
Nota :para uso en producción, puede comprar un certificado de una autoridad de certificación comercial (CA ) o obtenga un certificado gratuito, automatizado y completamente reconocido de Let's Encrypt . Luego crea un paquete PEM.
Si compró un certificado de una CA comercial , debe fusionar la clave privada, el certificado y el paquete de CA como se muestra.
# cat example.com.key example.com.crt example.com-ca-bundle.crt > /etc/ssl/example.com.pem
Para Let's Encrypt , el certificado, la clave privada y la cadena completa se almacenarán en /etc/letsencrypt/live/example.com/ , así que cree el paquete como se muestra.
# cat /etc/letsencrypt/live/example.com/fullchain.pem /etc/letsencrypt/live/example.com/privkey.pem >/etc/letsencrypt/live/example.com/example.com_bundle.pem
Paso 4:Configuración e inicio de enganche
# vi /etc/hitch/hitch.conf
La frontal sección define las direcciones IP y el puerto Hitch escuchará. La configuración predeterminada es escuchar en todos los IPv4 y IPv6 interfaces conectadas en el servidor y se ejecuta en el puerto 443 y manejar HTTPS entrantes solicitudes, entregándoselas a Varnish .
Cambiar el backend predeterminado puerto proxy de 6086 a 8443 (el puerto utilizado para reenviar solicitudes a Varnish ) en el Enganche archivo de configuración, usando el backend parámetro. Además, especifique el archivo de certificado usando el pem-file parámetro como se muestra.
backend = "[127.0.0.1]:8443" #pem-dir = "/etc/pki/tls/private" pem-file = "/etc/ssl/tecmint.lan/tecmint.pem"
Configurar Hitch como proxy SSL/TLS para Varnish
Guarde el archivo y ciérrelo.
--now
switch cuando se usa con enable, también inicia un servicio systemd y luego verifica el estado para ver si está funcionando de la siguiente manera.
# systemctl enable --now hitch # systemctl status hitch
Verificar estado de enganche
# firewall-cmd --zone=public --permanent --add-service=https # firewall-cmd --reload
Paso 5:Probar la terminación SSL/TLS con Varnish Cache-Hitch Setup
https://www.example.com OR https://SERVER_IP/
Una vez que se haya cargado la página de índice de su aplicación web, verifique el HTTP encabezados para confirmar que el contenido se publica a través de Varnish Cache .
Para hacerlo, haga clic derecho en la página web cargada, seleccione Inspeccionar de la lista de opciones para abrir las herramientas de desarrollo. Luego haga clic en Red pestaña y Recargar la página, luego seleccione una solicitud para ver los encabezados HTTP, como se destaca en la siguiente captura de pantalla.
Compruebe la configuración de HTTPS en Varnish Cache
Paso 6:redirigir HTTP a HTTPS en Varnish Cache
# vi /etc/hitch/hitch.conf
Primero, agregue la línea import std; justo debajo de vlc 4.0; , luego busque el vlc_recv subrutina, que es la primera subrutina VCL ejecutada inmediatamente después de Varnish Cache ha analizado la solicitud del cliente en su estructura de datos básica. Es donde podemos modificar los encabezados de las solicitudes y ejecutar un sintetizador para redirigir las solicitudes de los clientes.
Modifíquelo para que se vea así.
sub vcl_recv { if (std.port(server.ip) != 443) { set req.http.location = "https://" + req.http.host + req.url; return(synth(301)); } }
Tenga en cuenta que el PROXY protocolo habilita Varnish para ver Hitch's puerto de escucha 443 desde el servidor.ip variable. Entonces la línea std.port(server.ip) devuelve el número de puerto en el que se recibió la conexión del cliente.
Si el puerto no es 443 para HTTPS (comprobado por (std.port(server.ip) !=443) ), la subrutina establecerá el encabezado de ubicación HTTP de la solicitud (establecer req.http.ubicación ) a una solicitud segura ("https:// ” + req.http.host + url requerida ) simplemente pidiéndole al navegador web que cargue un HTTPS versión de la página web (es decir, redirección de URL).
La Ubicación el encabezado se enviará a vcl_synth subrutina (que se llama usando return(synth(301)) ) con un código de estado HTTP de 301 (Movido permanentemente ).
sub vcl_synth { if (resp.status == 301) { set resp.http.location = req.http.location; set resp.status = 301; return (deliver); } }
Comprueba si el estado de la respuesta es 301 , el encabezado de ubicación HTTP en la respuesta se establece en el encabezado de ubicación HTTP en la solicitud que, de hecho, es una redirección a HTTPS y ejecuta una acción de entrega.
La acción deliver construye una respuesta con la respuesta del backend, almacena la respuesta en el caché y la envía al cliente.
Configurar Hitch para redirigir HTTP a HTTPS
Guarde el archivo y ciérrelo.
# systemctl restart varnish # curl -I http://eaxmple.com/
Compruebe la redirección de HTTP a HTTPS
Desde el navegador, la respuesta también es la misma que se muestra en la siguiente captura de pantalla.
Compruebe la redirección de HTTP a HTTPS en el navegador
Esperamos que todo haya funcionado bien hasta este punto. De lo contrario, deje un comentario o preguntas a través del formulario de comentarios a continuación. Para cualquier opción de configuración avanzada, vaya a la documentación de Varnish Cache y la documentación de Hitch.
Compartir es cuidar…Compartir en FacebookCompartir en TwitterCompartir en LinkedinCompartir en Reddit