Ubuntu : configurer Apache Traffic Server comme reverse-proxy

Introduction

Apache Traffic Server est un serveur proxy cache hautement modulable capable de traiter de gros volumes de demandes simultanées tout en maintenant une très faible latence. Comparé à d’autres serveurs proxy populaires, tels que Varnish ou Squid, il consomme généralement moins de mémoire et répond plus rapidement. Il est également conçu pour tirer le meilleur parti des processeurs multi-cœurs modernes. Selon vos besoins, vous pouvez l’utiliser comme un reverse proxy ou comme un proxy direct.

Ce tutoriel explique comment le configurer en tant que reverse proxy cache. Il est fortement inspiré et traduit de ce tutoriel de Digital Ocean, avec en plus la configuration du https et la gestion d’un site WordPress avec apache en back-end !

Partie 1: Installation

L’installation est très simple puisque les paquets sont disponibles sur les dépôts officiels d’Ubuntu. Il suffit donc de faire un tour d’apt-get.

sudo apt-get install trafficserver

Et si jamais vous cherchez la dernière version de Traffic Server j’ai compilé la dernière version (au jour de cet article) en version 64 bits –>

Une fois téléchargé installez-le simplement :

dpkg -i trafficserver_6.2.0-rc0-1_amd64.deb

Bon à savoir : si vous installez le package que je vous donne ci-dessus, les fichiers de config ne sont pas dans le dossier /etc/trafficserver mais dans /usr/local/etc/trafficserver

 

Partie 2 : Configurer Apache

Il faut dire à Apache de n’écouter qu’en local car il ne doit être accessible que par trafficserver.

Pour se faire on modifie le fichier : /etc/apache2/ports.conf

sudo nano /etc/apache2/ports.conf

Et on rajoute devant le port “localhost”

Listen  localhost:80

A vous de choisir vos ports, pour ne pas avoir de problème avec un site http sur le port 80 il vaut mieux faire écouter apache sur un autre port, par exemple 81! De même pour l’utilisation du https, il s’agit du port 443, il vaut mieux de faire alors comme ceci :

<IfModule ssl_module>
        Listen localhost:444
</IfModule>

Et dans vos fichiers de config (/etc/apache2/sites-enabled/), n’oubliez pas de préciser cela :

ServerName localhost

Maintenant on applique les modifications.

sudo service apache2 restart

Partie 3 : Configurer Traffic Server comme reverse Proxy

Pour que Traffic Server se comporte comme un reverse proxy il faut lui dire quelle adresse d’entrée doit pointer avec quelle adresse interne. Ces instructions se trouvent dans le fichier remap.config.

sudo nano /etc/trafficserver/remap.config

Les règles se font simplement à l’aide d’un map et d’un reverse_map. Ici on redirige toutes les requêtes externes sur le port 80 vers le port interne 81 et toutes les requêtes sur le port 443 vers le port 444 :

#HTTP
map http://your_domain:80/ http://localhost:81/
reverse_map http://localhost:81/ http://your_domain:80/

#HTTPS

map https://your_domain:443/ https://localhost:444/
reverse_map https://localhost:444/ https://your_domain:443/

Notez la présence du protocole https des deux côtés du serveur. Après plusieurs tests cette méthodes éloigne les bugs… Surtout quand vous avez WordPress en back-end.

Pour appliquer la configuration voici la commande :

traffic_ctl config reload

 

Partie 4 : Configurer Traffic Server pour tout mettre en cache

Par défaut, Trafic Server met en cache une réponse HTTP seulement si elle contient une en-tête Cache-Control ou Expires spécifiant explicitement combien de temps l’élément doit être stocké dans le cache. Cependant, si votre serveur sert uniquement des fichiers statiques, il est plus simple de mettre en cache toutes ses réponses.

Vous devez ajouter simplement ceci dans le fichier records.config :

nano /etc/trafficserver/records.config
CONFIG proxy.config.http.cache.required_headers INT 0

 

Partie 5 : Inspecter le cache

Pour afficher le contenu de la mémoire cache de Traffic Server, vous pouvez utiliser un outil appelé Cache Inspector, qui dispose d’une interface Web.

Pour activer cet outil il nous faut modifier encore une fois le fichier records.config :

nano /etc/trafficserver/records.config
CONFIG proxy.config.http_ui_enabled INT 1

Puis nous devons créer une règle afin d’assigner l’url extérieure de son choix vers ce Cache Inspector :

nano /etc/trafficserver/remap.config
#HTTP
map http://your_domain:80/inspect http://{cache}

#HTTPS
map https://your_domain:443/inspect http://{cache}
service trafficserver restart

Partie 6 : Installer un certificat SSL pour utiliser le protocole HTTPS

Avant de commencer quoi que ce soit vérifiez que vos certificats sont au format PEM.

Si ce n’est pas le cas convertissez les comme dit ici.

N’oubliez pas de faire de même avec votre fichier CA.crt et combiné les deux dans un seul fichier avec en premier votre certificat puis le CA.

Ensuite on précise dans le fichier records.config que l’on veut mettre une couche de ssl sur certain port en rajoutant “:ssl” :

CONFIG proxy.config.http.server_ports STRING 443:ssl

Puis on lui indique le dossier où se trouve nos certificats. Vous pouvez créer un dossier :

mkdir /etc/trafficserver/ssl
chown nobody /etc/trafficserver/ssl

Mettez y vos certificats et adaptez ces lignes au fichier records.config

##############################################################################
# SSL Termination. Docs:
#    https://docs.trafficserver.apache.org/records.config#client-related-configuration
#    https://docs.trafficserver.apache.org/en/latest/admin-guide/files/ssl_multicert.config.en.html
##############################################################################
CONFIG proxy.config.ssl.client.verify.server INT 0
CONFIG proxy.config.ssl.client.CA.cert.filename STRING NULL
CONFIG proxy.config.ssl.server.cipher_suite STRING ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-DSS-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-DSS-AES256-SHA:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
CONFIG proxy.config.ssl.server.cert.path STRING /etc/trafficserver/ssl/
CONFIG proxy.config.ssl.server.private_key.path STRING /etc/trafficserver/ssl/
CONFIG proxy.config.ssl.CA.cert.path STRING /usr/local/etc/trafficserver/ssl/CA.pem
CONFIG proxy.config.ssl.session_cache INT 2
CONFIG proxy.config.ssl.session_cache.timeout INT 300

Maintenant on modifie un nouveau fichier, ssl_mutlicert.config :

nano /etc/trafficserver/ssl_multicert.config

Et on ajoute à la fin :

dest_ip=* ssl_cert_name=combine.pem ssl_key_name=key.pem

Voilà ! Tout devrait marcher.

Partie 7 : Optimisation pour WordPress

Si vous avez un site WordPress en back-end, il est fort probable que TrafficServer ne mette pas grand chose en cache.

Pour lui forcer la main voici une technique fait maison !

Modifiez le fichier cache.config et ajoutez ces règles de mise en cache. Ce fichier marche avec les noms de domaines en back-end.

url_regex=^https://localhost:444/(wp-content|wp-includes) ttl-in-cache=7d
url_regex=^https://localhost:444(/|/.*/)$ ttl-in-cache=2h

Ici je demande à Traffic Server de forcer la mise en cache (ttl-in-cache :

 

Laissez un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Generic selectors
Exact matches only
Search in title
Search in content
Post Type Selectors