La velocidad de la página o el tiempo de carga es crucial para el éxito de tu tienda online. El tiempo de carga es la cantidad total de tiempo que tarda en cargarse el contenido de una página específica. Cuanto mayor sea el tiempo de carga, menor será la tasa de conversión. También es uno de los factores más importantes que Google considera para determinar la clasificación en los motores de búsqueda.
En la primera publicación, instalamos Magento 2 en nuestra máquina CentOS 7. En la segunda publicación de esta serie, cubriremos la instalación y configuración de Varnish para que nuestra tienda Magento sea súper rápida.
Requisitos previos #
Asegúrate de haber seguido las instrucciones de la primera publicación y de tener EPEL
repositorio habilitado.
Cómo funciona #
Varnish no es compatible con SSL, por lo que debemos usar otro servicio como proxy de terminación SSL, en nuestro caso será Nginx.
Cuando un visitante abre su sitio web a través de HTTPS
en el puerto 443
la solicitud será manejada por Nginx, que funciona como un proxy y pasa la solicitud a Varnish (en el puerto 80). Varnish comprueba si la solicitud se almacena en caché o no. Si está en caché, Varnish devolverá los datos almacenados en caché a Nginx sin una solicitud a la aplicación Magento. Si la solicitud no se almacena en caché, Varnish pasará la solicitud a Nginx en el puerto 8080
que extraerá datos de Magento y Varnish almacenará en caché la respuesta.
Si un visitante abre su sitio web sin SSL
en el puerto 80
luego será redirigido al HTTPS
en el puerto 443
URL de Varnish.
Configuración de Nginx #
Necesitamos editar el bloque del servidor Nginx que creamos en la primera publicación para manejar la terminación de SSL/TLS y como back-end para Varnish.
/etc/nginx/conf.d/example.com.confupstream fastcgi_backend {
server unix:/run/php-fpm/magento.sock;
}
server {
listen 127.0.0.1:8080;
server_name example.com www.example.com;
set $MAGE_ROOT /opt/magento/public_html;
set $MAGE_MODE developer; # or production
include snippets/letsencrypt.conf;
include /opt/magento/public_html/nginx.conf.sample;
}
server {
listen 443 ssl http2;
server_name www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
include snippets/ssl.conf;
return 301 https://example.com$request_uri;
}
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
include snippets/ssl.conf;
access_log /var/log/nginx/example.com-access.log;
error_log /var/log/nginx/example.com-error.log;
location / {
proxy_pass http://127.0.0.1;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Host $http_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 https;
proxy_set_header X-Forwarded-Port 443;
}
}
También debemos eliminar el bloque del servidor Nginx predeterminado del nginx.conf
expediente. Comente o elimine las siguientes líneas:
...
# server {
# listen 80 default_server;
# listen [::]:80 default_server;
# server_name _;
# root /usr/share/nginx/html;
#
# # Load configuration files for the default server block.
# include /etc/nginx/default.d/*.conf;
#
# location / {
# }
#
# error_page 404 /404.html;
# location = /40x.html {
# }
#
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# }
# }
...
Vuelva a cargar el servicio Nginx para que los cambios surtan efecto:
sudo systemctl reload nginx
Instalando y configurando Varnish #
Varnish es un acelerador HTTP de proxy inverso rápido que se ubicará frente a nuestro servidor web y se usará como un Full Page Cache
solución para nuestra instalación de Magento.
Instale Varnish a través de yum con el siguiente comando:
sudo yum install varnish
Para configurar Magento para usar Varnish, ejecute:
php /opt/magento/public_html/bin/magento config:set --scope=default --scope-code=0 system/full_page_cache/caching_application 2
A continuación, debemos generar un archivo de configuración de Varnish:
sudo php /opt/magento/public_html/bin/magento varnish:vcl:generate > /etc/varnish/default.vcl
El comando anterior debe ejecutarse como root o usuario con privilegios sudo y creará un archivo /etc/varnish/default.vcl
utilizando los valores predeterminados que son localhost
como host de back-end y puerto 8080
como puerto de back-end.
La configuración predeterminada viene con una URL incorrecta para el archivo de verificación de estado. Abra el default.vcl
archivo y elimine el /pub
parte de la línea resaltada en amarillo:
...
.probe = {
# .url = "/pub/health_check.php";
.url = "/health_check.php";
.timeout = 2s;
.interval = 5s;
.window = 10;
.threshold = 5;
}
...
Por defecto, Varnish escucha en el puerto 6081
, y necesitamos cambiarlo a 80
:
VARNISH_LISTEN_PORT=80
Una vez que haya terminado con las modificaciones, inicie y habilite el servicio Varnish:
sudo systemctl enable varnish
sudo systemctl start varnish
Puedes usar el varnishlog
herramienta para ver solicitudes web en tiempo real y para depurar Varnish.