Logo de Béjean Développement

Magento 2 : Comment mettre en place Let's Encrypt et Varnish

Pré-requis

  • Disposer d'un serveur sous Linux Debian 9 avec NGINX
  • Avoir installer Magento 2.2.x
  • Avoir une connexion au serveur par SSH ou par un Terminal

Objectif

Mettre en place un certificat SSL Let's Encrypt et mettre en place le cache Varnish

Tutoriel

Installation et obtention du certificat SSL

Pour obtenir un certificat SSL, il est nécessaire d'installer Certbot. Pour cela, il faut ajouter le dépôt dans le fichier /etc/apt/sources.list : nano /etc/apt/sources.list

Ajouter à la fin du fichier :

# Certbot
deb http://deb.debian.org/debian stretch-backports main contrib non-free
deb-src http://deb.debian.org/debian stretch-backports main contrib non-free

Procéder à l'installation de Certbot : apt-get update && apt install python-certbot-nginx -t stretch-backports

Dès que l'installation est terminée, il faut obtenir le certificat : certbot --nginx -d nomdedomaine.com -d www.nomdedomaine.com

Il faut remplacer nomdedomaine.com et www.nomdedomaine.com par la valeur server_name présent dans le vhost NGINX de l'hébergement souhaité.

Lors de la récupération du certificat SSL, il vous sera demandé de faire votre choix entre No Redirect et Redirect :

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
-------------------------------------------------------------------------------
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

Sélectionner le choix qui vous convient pour finaliser la configuration.

Installation et paramétrage de Varnish

Tout d'abord, il est nécessaire d'installer Varnish : apt-get install varnish

Accéder ensuite à l'interface d'administration de votre site Magento 2, cliquer sur STORES > Configuration > ADVANCED > System > Full Page Cache.

Au lieu de choisir le système de cache Built-in Cache, sélectionner Varnish Cache (Recommended).

Cliquer sur Varnish Configuration et procéder au paramétrage suivant :

  • Access list : Renseigner l'adresse IP du serveur ayant Magento 2 installé
  • Backend host : Renseigner l'adresse IP du serveur ayant Magento 2 installé
  • Backend port : 8080
  • Grace period : 300

Cliquer sur Save Config et exporter le fichier de configuration Varnish en cliquant sur Export VCL for Varnish 4

La version 2.2 de Magento n'est pas compatible avec Varnish 5. Le fichier exporté pour Varnish 5 sera exécuté avec le moteur Varnish 4.

Une fois le fichier default.vcl téléchargé. Ouvrir, sur le serveur Varnish, le fichier /etc/varnish/default.vcl et remplacer son contenu par le fichier téléchargé.

Avant cela, je vous invite à créer une copie du fichier de configuration par défaut : cp /etc/varnish/default.vcl /etc/varnish/default.vcl.origin && nano /etc/varnish/default.vcl

Remplacer tout le contenu du fichier par le contenu du fichier de configuration généré par Magento.

Avant d'enregistrer et de fermer le fichier, il faut procéder à quelques modifications.

Remplacer dans backend default, la valeur de l'url probe : .url = "/pub/health_check.php"; par .url = "/health_check.php"; afin d'éviter d'obtenir l'erreur suivante 503 Backend fetch failed.

Rechercher la ligne # Static files caching et commenter l'instruction return (pass); et supprimer les commentaires sur les 3 instructions unset ... afin de mettre en cache les fichiers statiques.

Enregistrer et fermer le fichier de configuration.

Sur le serveur NGINX, ouvrir le fichier nginx.conf.sample du site Magento 2 et vérifier la présence de health_check dans l'instruction située après le commentaire # PHP entry point for main application.

Pour finaliser la configuration de Varnish, il est nécessaire de modifier le fichier /lib/systemd/system/varnish.service : nano /lib/systemd/system/varnish.service

Remplacer la ligne : ExecStart=/usr/sbin/varnishd -a :6081 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m par le contenu ci-dessous :

ExecStart=/usr/sbin/varnishd -a :8080 \
    -T localhost:6082 \
    -f /etc/varnish/default.vcl \
    -p thread_pools=4 \
    -p thread_pool_max=1000 \
    -p connect_timeout=300 \
    -p http_resp_hdr_len=65536 \
    -p http_resp_size=98304 \
    -S /etc/varnish/secret \
    -s malloc,1024m

Enregistrer, et fermer le fic et relancer Varnish : systemctl daemon-reload && service varnish restart

Vérifier que Varnish est actif avec les paramètres renseignés : service varnish status

Configuration de Varnish avec Let's Encrypt

Pour faire fonctionner une boutique en HTTPS avec Varnish, il faut que NGINX écoute les ports 443, pour cela, il faut modifier le fichier de vhost nano /etc/nginx/sites-available/votre_fichier_vhost`

Remplacer l'instruction listen 80 par listen 8080 et ajouter un bloc server pour le HTTPS, voici le résultat final :

upstream fastcgi_backend {
    server unix:/run/php/php7.0-fpm.sock;
}

server {
    listen 8080;
    server_name nom_de_domaine;
    set $MAGE_ROOT /var/www/dossier_du_site_magento_2;
    include /var/www/dossier_du_site_magento_2/nginx.conf.sample;
}

server {
    listen 443 ssl http2;
    server_name nom_de_domaine;

    fastcgi_param HTTPS on;

    ssl on;
    ssl_certificate /etc/letsencrypt/live/nom_de_domaine/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/nom_de_domaine/privkey.pem;

    if ($scheme = https) {
        set $ssl_offloaded on;
    }

    location / {
        # Renvoi sur le serveur Varnish
        proxy_pass http://adresse_ip_du_serveur_varnish:8080;
        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 Ssl-Offloaded "1";
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Forwarded-Port 443;
        proxy_hide_header X-Varnish;
        proxy_hide_header Via;
        proxy_set_header HTTPS "on";
    }
}

Enregistrer et fermer le fichier. Tester ensuite la configuration en utilisant la commande nginx -t et redémarrer si aucune erreur n'est indiquée : service nginx restart

Avant de terminer, il faut lancer la commande : php /var/www/dossier_du_site_magento_2/bin/magento setup:config:set --use-secure=1 --use-secure-admin=1 --base-url-secure=https://nom_de_domaine --use-rewrites=1 --http-cache-hosts=adresse_ip_du_serveur_varnish:8080

Vider le cache de Magento : php /var/www/dossier_du_site_magento_2/bin/magento cache:flush

L'installation et le paramétrage de Varnish avec SSL est terminé.