Les instructions ci-dessous ont été personnalisées pour votre projet "".
Personnalisez ces instructions pour le projet
Module Apache
Nous proposons un module Apache qui expose redirection.io directement dans votre configuration Apache. L'utilisation de ce module est l'un des moyens conseillés pour intégrer redirection.io dans votre infrastructure.
Nous proposons également un module nginx pour les utilisateurs de nginx.
Comme alternative au déploiement utilisant le mode "reverse proxy", le module Apache redirection.io est un moyen rapide d'intégrer redirection.io dans votre infrastructure existante. Ce module dynamique se greffe simplement sur la boucle de requête et de réponse d'Apache et interroge de manière synchrone une API TCP de l'agent installé localement dès qu'une requête arrive. Lorsqu'une requête HTTP(s) entrante arrive, elle est traitée par le serveur web Apache, dans lequel le module natif de redirection.io s'insère de manière très rapide et performante :
Veuillez noter que le module Apache nécessite qu'une instance de l'agent redirection.io soit disponible sur votre infrastructure, veuillez donc également installer l'agent redirection.io.
Installation du module
Distributions basées sur Debian et APT
Si vous utilisez une distribution Linux basée sur Debian ou APT et que vous souhaitez installer libapache2-mod-redirectionio, veuillez utiliser les commandes suivantes :
-
Sélectionnez votre distribution
Dans les étapes suivantes, veuillez utiliser les bonnes valeurs, en fonction de la version de votre distribution :- Debian 13 (Trixie)
- repository source url:
trixie main - Debian 12 (Bookworm)
- repository source url:
bookworm main - Debian 11 (Bullseye)
- repository source url:
bullseye main - Ubuntu 24.04 LTS (Noble Numbat)
- repository source url:
noble main - Ubuntu 22.04 LTS (Jammy Jellyfish)
- repository source url:
jammy main
-
Installez le paquet
apt-transport-https:sudo apt-get install apt-transport-https -
Importez la clé de notre dépôt apt :
sudo mkdir -p /etc/apt/keyrings wget -qO- https://packages.redirection.io/gpg.key | sudo tee /etc/apt/keyrings/redirectionio-archive-keyring.asc -
Ajoutez l'URL de notre dépôt Debian :
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/redirectionio-archive-keyring.asc] https://packages.redirection.io/deb/stable/3 trixie main" | sudo tee -a /etc/apt/sources.list.d/packages_redirection_io_deb.list > /dev/null -
Mettez à jour le cache apt et installez le module Apache de redirection.io :
sudo apt update && sudo apt install libapache2-mod-redirectionio -
Une fois le module installé, redémarrez le service apache2, par exemple :
sudo systemctl restart apache2
C'est terminé ! redirection.io est installé et opérationnel. Vous pouvez poursuivre avec la configuration Apache de redirection.io et devriez voir des logs apparaître en quelques minutes 🎉
Distributions basées sur Red Hat et RPM
Notre module Apache est disponible pour Centos 7, Centos 8, RHEL 7, RHEL 8 jusqu'à la version 2.8.0. À partir de la version 2.9.0, seule la version Centos 9 stream est supportée. Cependant, vous pouvez toujours compiler le module Apache redirection.io pour votre distribution.
Si vous utilisez une distribution Linux de type Red Hat/CentOS et que vous souhaitez installer libapache2-mod-redirectionio, veuillez utiliser les commandes suivantes :
-
Importez la clé de signature :
sudo rpm --import https://packages.redirection.io/gpg.key -
Ajoutez notre dépôt RPM :
sudo yum-config-manager --add-repo https://packages.redirection.io/rpm/stable/3/centos_9 -
Installez le module Apache de redirection.io :
sudo yum install libapache2-mod-redirectionio -
Une fois le module installé, redémarrez le service apache2, par exemple :
sudo systemctl restart apache2
C'est terminé ! redirection.io est installé et opérationnel. Vous pouvez poursuivre avec la configuration Apache de redirection.io et devriez voir des logs apparaître en quelques minutes 🎉
Rôle Ansible
Un rôle Ansible redirectionio.apache_module est disponible. Vous pouvez l'installer via Ansible Galaxy :
ansible-galaxy install redirectionio.apache_module
Ce rôle installe le module Apache redirection.io et s'assure que vous utilisez les bons emplacements de dépôts selon votre système d'exploitation. Il supporte les distributions Linux basées sur Debian et RHEL.
Configuration
L'activation de redirection.io consiste uniquement à déclarer la clé du projet dans le VirtualHost ou le nœud de configuration dans lequel vous souhaitez activer redirection.io.
Vous pouvez trouver la clé du projet dans l'écran "instances" du manager (cliquez sur le bouton "Installer sur votre site web" > "Installer sur votre infrastructure").
Par exemple, dans un VirtualHost :
<VirtualHost *:8080>
DocumentRoot /path/to/root
ServerName example.org
# ...
RedirectionioProjectKey "SOME_PROJECT_KEY_HERE"
# ...
</VirtualHost>
Ou même dans une Location :
<VirtualHost *:8080>
DocumentRoot /path/to/root
ServerName example.org
# ...
<LocationMatch "^/some-path">
RedirectionioProjectKey "SOME_PROJECT_KEY_HERE"
</LocationMatch>
# ...
</VirtualHost>
La directive RedirectionioProjectKey peut être entourée de guillemets doubles ou non (ex., MA_CLE_DE_PROJET_ICI ou "MA_CLE_DE_PROJET_ICI").
Directives de configuration du module
Le paquet libapache2-mod-redirectionio active plusieurs directives de configuration, qui peuvent être utilisées partout où RedirectionioProjectKey est utilisé :
Redirectionio
- Syntaxe :
Redirectionio"on" | "off" - Défaut :
Redirectionio "off" - Contexte :
VirtualHost, Location, LocationMatch
Cette directive active ou désactive redirection.io pour les requêtes correspondant au contexte actuel. Par défaut, redirection.io est désactivé, mais il est automatiquement activé lorsque la directive RedirectionioProjectKey est définie dans un nœud de la configuration.
L'utilisation de Redirectionio "off" peut donc être utile pour désactiver redirection.io dans un emplacement particulier.
RedirectionioProjectKey
- Syntaxe :
RedirectionioProjectKey"une_cle" - Défaut :
aucune - Contexte :
VirtualHost, Location, LocationMatch
Définit la clé de projet redirection.io à utiliser pour les requêtes correspondant au contexte actuel. Lorsqu'elle est définie, cette directive active automatiquement la directive Redirectionio.
RedirectionioLogs
- Syntaxe :
RedirectionioLogs"on" | "off" - Défaut :
RedirectionioLogs "on" - Contexte :
VirtualHost, Location, LocationMatch
Cette directive active ou désactive la collecte des logs pour le contexte actuel (veuillez toutefois noter que les logs ne seront envoyés que si les directives Redirectionio et RedirectionioLogs sont toutes deux sur on. En d'autres termes, régler RedirectionioLogs sur on alors que Redirectionio est sur off ne collectera aucun log).
RedirectionioPass
- Syntaxe :
RedirectionioPass"tcp://ip:port" | "unix:///path" - Défaut :
RedirectionioPass "tcp://127.0.0.1:10301" - Contexte :
VirtualHost, Location, LocationMatch
Cette directive spécifie l'emplacement du redirectionio-agent que le module Apache doit utiliser pour le matching des requêtes. Dans une installation traditionnelle, l'agent est simplement disponible sur 127.0.0.1:10301. Si vous exposez l'agent via un fichier, la valeur de la directive RedirectionioPass peut, par exemple, être de la forme unix:///var/run/redirectionio.sock.
Cette directive permet également de définir des options de gestion du pool de connexions :
RedirectionioPass "tcp://127.0.0.1:10301" min_conns=1 keep_conns=10 max_conns=100 timeout=100
Tous les paramètres min_conns, keep_conns, max_conns et timeout sont facultatifs :
min_conns(défaut1) : il s'agit du nombre minimal de connexions TCP établies en permanence entre le module Apache2 et l'agent redirection.io. Si ces connexions n'existent pas, elles sont créées, même si aucune requête HTTP n'est traitée par le serveur Apache2.max_conns(défaut100) : il s'agit du nombre maximal de connexions TCP pouvant être établies entre le module Apache2 et l'agent redirection.io à un instant donné. Si toutes les connexions sont actuellement utilisées, le module attendra pendant la durée dutimeout, puis enregistrera une erreur et laissera passer la requête sans la traiter.keep_conns(défaut10) : il s'agit du nombre minimal de connexions TCP à maintenir actives une fois qu'elles ont été créées.timeout(défaut100) : il s'agit de la durée, en millisecondes, pendant laquelle le module Apache2 attendra une réponse de l'agent. L'agent redirection.io est très performant et, même avec des centaines de milliers de règles, devrait toujours envoyer une réponse bien plus rapidement que cette valeur de timeout (généralement en moins de 1ms), mais ce paramètre garantit que, même dans des contextes de très forte charge, l'appel à l'agent ne bloquera pas la requête trop longtemps.
Par exemple, avec min_conns=1 keep_conns=10 max_conns=100 timeout=50 :
1connexion est établie entre Apache2 et l'agent au démarrage d'Apache2 ;- Apache2 créera jusqu'à
100connexions vers l'agent (bien sûr, il réutilise les connexions disponibles) ; - si de nombreuses connexions ont été créées et ne sont plus utiles, elles seront libérées, mais Apache2 maintiendra
10connexions actives ; - Apache2 attendra au maximum
50millisecondes pour une réponse de l'agent redirection.io.
RedirectionioRuleIdsHeader
- Syntaxe :
RedirectionioRuleIdsHeader"on" | "off" - Défaut :
RedirectionioRuleIdsHeader "off" - Contexte :
VirtualHost, Location, LocationMatch
Si ce paramètre est activé, un header de réponse nommé X-RedirectionIo-RuleIds sera ajouté à la réponse. Sa valeur contiendra la liste des identifiants de règles redirection.io appliquées à cette réponse, séparés par le caractère ;.
RedirectionioScheme
- Syntaxe :
RedirectionioScheme"http" | "https" - Défaut :
aucun - Contexte :
VirtualHost, Location, LocationMatch
Cette directive permet de forcer le schéma à utiliser lors du matching de la requête. Ceci est utile si vous avez défini des règles utilisant un déclencheur URL avec une valeur d'URL absolue (contenant un schéma, un nom de domaine, etc.), mais que vous souhaitez utiliser les mêmes règles dans un VirtualHost avec un autre schéma.
Imaginez, par exemple, un VirtualHost écoutant uniquement le trafic HTTPS, utilisant un projet dans lequel les règles sont définies avec le schéma http:// : les URL ne correspondraient jamais, car aucune règle n'utilise le schéma https://. Dans ce cas, régler la valeur de RedirectionioScheme sur http forcera le module à effectuer le matching avec ce schéma, et non le schéma réel de la requête.
RedirectionioSetHeader
- Syntaxe :
RedirectionioSetHeaderX-Custom-Header-Name HeaderValue; - Défaut :
aucun - Contexte :
VirtualHost, Location, LocationMatch
Cette directive permet de transmettre la requête au module redirection.io en ajoutant un header de requête rempli avec une valeur donnée. La valeur passée au header peut être une variable Apache, par ex. :
RedirectionioSetHeader X-GeoIP-Country-Code $(GEOIP_COUNTRY_CODE);
Cela peut être utile pour transmettre des variables du contexte Apache à l'agent redirection.io, qui peuvent ensuite être utilisées dans les règles de redirection via le trigger de header de requête.
RedirectionioTrustedProxies
- Syntaxe :
RedirectionioTrustedProxies127.0.0.1,172.18.0.0/24; - Défaut :
aucun - Contexte :
VirtualHost, Location, LocationMatch
Cette directive est utilisée par le module pour restreindre quels proxies sont de confiance avant d'évaluer les headers X-Forwarded-*. C'est particulièrement utile lors de l'utilisation du déclencheur par adresse IP, afin de garantir que l'adresse IP évaluée est valide et n'a pas été falsifiée.
La valeur à utiliser pour cette directive est une liste séparée par des virgules de toutes les adresses IP des proxies qui doivent être considérés comme de confiance (une notation CIDR peut être utilisée pour les sous-réseaux).
Le module Apache est open source et disponible sur notre compte GitHub.
Questions, réponses et dépannage
Y a-t-il des inconvénients à utiliser le module Apache au lieu du mode "reverse proxy" ?
Bien que cette approche soit intéressante - car elle implique peu de changements dans l'architecture de l'infrastructure et le flux de requêtes de votre pile - elle peut parfois s'avérer complexe à mettre en place :
- premièrement, les modules Apache sont liés à des versions très spécifiques d'Apache. Nous distribuons des modules pré-compilés pour les versions d'Apache officiellement fournies par les distributions, mais nous ne pouvons pas distribuer notre module pour toutes les versions d'Apache existantes. En d'autres termes, les utilisateurs d'installations Apache personnalisées devront compiler le module Apache eux-mêmes.
- le flux de gestion des requêtes Apache n'est pas un long fleuve tranquille 🙂 Autrement dit, selon les modules installés, des comportements inattendus peuvent apparaître, et il n'y a aucun moyen de garantir que notre module s'intégrera parfaitement à votre installation Apache. Par exemple, il peut y avoir des incompatibilités avec d'autres modules.
- les modules Apache sont développés en langage C, ce qui ne garantit pas la sécurité mémoire. L'agent redirection.io lui-même, ainsi que la bibliothèque sous-jacente open source libredirectionio, sont des binaires basés sur Rust.
- la mise à jour d'un module dynamique nécessite un redémarrage du serveur, ce qui n'est pas toujours souhaitable.
- enfin et surtout, l'utilisation du module Apache redirection.io signifie que, pour chaque requête, un appel TCP synchrone est effectué du processus Apache vers l'agent redirection.io. Nous proposons plusieurs directives d'ajustement pour maintenir un pool de connexions, et cela fonctionnera parfaitement sur des sites web à trafic raisonnable, mais cela peut devenir un défi à configurer correctement dans des environnements très exigeants.
C'est pourquoi nous recommandons généralement de privilégier le mode reverse proxy. Cependant, le module Apache est un moyen parfaitement pratique, supporté et entièrement testé d'utiliser redirection.io si vous le souhaitez.
Le module loggue des erreurs 500 qui n'ont pas eu lieu
Le module Apache est conçu pour enregistrer le flux exact des requêtes et des réponses tel qu'il est géré en interne par le serveur Apache. Cela signifie que si le module enregistre une erreur 500, c'est parce que le serveur Apache a traité la requête en interne avec un code de réponse 500, même si le client n'a pas réellement reçu cette réponse 500.
Il peut y avoir plusieurs raisons à cela :
- la plus courante est que la requête HTTP a été annulée par le client avant que le serveur Apache ne puisse envoyer la réponse, et que le serveur Apache a géré cela en interne comme une erreur
500(par exemple, parce qu'un module FastCGI a renvoyé une erreur suite à l'interruption de la requête). Ces erreurs500sont également visibles dans les access logs. - ou alors, la réponse réelle envoyée au client a été modifiée par un autre module après que le module redirection.io a enregistré la requête.
Le module redirection.io enregistre le code de réponse tel qu'Apache lui-même l'enregistre. Dans certains cas, cela peut être perturbant de voir des erreurs 500 dans les logs de redirection.io, car elles peuvent polluer les logs et rendre plus difficile la recherche des erreurs réelles. Si vous souhaitez éviter cela, nous vous conseillons plutôt d'installer l'agent redirection.io en mode "reverse proxy", qui n'est pas affecté par ce problème.
Utiliser le module Apache avec une installation Apache2 non standard
Notre module Apache est l'un des moyens recommandés pour intégrer redirection.io dans les stacks Web. Nous distribuons notre module Apache pour de nombreuses distributions, ce qui devrait couvrir la plupart des cas de production. Cependant, il peut arriver que votre hébergeur ou votre solution de déploiement installe une version personnalisée d'Apache, dans des chemins non standard ou avec des dépendances incompatibles.
Cette section vous guidera à travers les étapes pour faire fonctionner notre module Apache avec votre installation Apache2, quelle que soit sa configuration.
Si vous maîtrisez Docker, ce processus de compilation est également disponible sous forme de Dockerfile sur notre compte GitHub.
Télécharger et compiler la bibliothèque libredirectionio
La bibliothèque libredirectionio est une bibliothèque Rust qui traite les redirections et le filtrage à partir des règles créées à l'aide de redirection.io. Cette bibliothèque est utilisée dans nos différents proxies, et spécifiquement dans le module Apache2.
-
Installez les outils de compilation Rust :
# Debian-based distribution apt install autoconf build-essential curl wget unzip curl https://sh.rustup.rs -sSf | sh -s -- --default-toolchain stable -y apt install cargo wget unzip # RedHat-based distribution yum install -y epel-release yum-utils curl yum -y groupinstall 'Development Tools' curl https://sh.rustup.rs -sSf | sh -
Récupérez les sources de la bibliothèque libredirectionio :
cd /tmp wget -O libredirectionio-master.zip https://github.com/redirectionio/libredirectionio/archive/master.zip unzip libredirectionio-master.zip cd libredirectionio-master -
Et compilez la bibliothèque :
autoreconf -i && \ ./configure && \ make clean && \ make && \ make install
Si la compilation réussit (cela peut être long), vous devriez obtenir une bibliothèque statique target/release/libredirectionio.so.
Télécharger et compiler les sources du module
Le module Apache de redirection.io est disponible en tant que projet Opensource sur notre compte GitHub.
-
Tout d'abord, installez quelques outils et utilitaires de compilation :
# Debian-based distribution apt install gawk # RedHat-based distribution yum install gcc gawk wget unzip -
Assurez-vous qu'
apxsest installé sur votre système.apxs(également connu sous le nom de "APache eXtenSion tool") est un outil permettant de compiler et d'installer des modules d'extension pour le serveur Apache :which apxsSi cette commande ne retourne pas le chemin complet d'
apxs, vous devez l'installer. Cela dépend de votre distribution, mais vous pouvez généralement obtenirapxsen utilisant l'une des commandes suivantes :# Debian-based distribution apt install apache2-dev # RedHat-based distribution yum install httpd-devel # Amazon Linux yum install httpd24-devel -
Téléchargez le module :
cd /tmp wget -O libapache2-mod-redirectionio-master.zip https://github.com/redirectionio/libapache2-mod-redirectionio/archive/master.zip -
Ensuite, compilez le module :
unzip libapache2-mod-redirectionio-master.zip cd libapache2-mod-redirectionio-master autoreconf -i ./configure make clean make sudo make install
Installer le module dans le bon chemin
L'installation du module devrait être assez directe dans la plupart des cas :
make install
Si cela fonctionne, vous êtes prêt, félicitations ! Cependant, cette étape peut échouer si votre installation d'Apache2 n'utilise pas les répertoires Apache standards de votre distribution. Dans ce cas, vous devez copier le module dans le dossier approprié.
-
Tout d'abord, trouvez le dossier des modules. Cela peut être fait en inspectant la configuration d'Apache :
/path/to/your/apache -V | grep SERVER_CONFIG_FILE # devrait afficher quelque chose comme : SERVER_CONFIG_FILE="/etc/apache-custom/httpd.conf" # ce qui signifie que le fichier de config est "/etc/apache-custom/httpd.conf"Utilisez
catpour afficher le contenu de ce fichier : vous devriez remarquer plusieurs directivesLoadModule, par exempleLoadModule auth_basic_module lib/apache-custom/mod_auth_basic.so.Cela signifie que le chemin des modules se trouve dans
/etc/apache-custom/lib/apache-custom/. Hourra 🎉 -
Déplacez le module dans ce dossier :
# modifiez les permissions du module chmod 644 ./src/mod_redirectionio.so # ensuite, copiez-le au bon endroit # (bien sûr, utilisez le chemin que vous avez trouvé ci-dessus) sudo mv ./src/mod_redirectionio.so /etc/apache-custom/lib/apache-custom/ -
Chargez le module dans Apache - pour cela, ajoutez une directive
LoadModuledanshttpd.conf, par exemple :LoadModule redirectionio_module lib/apache-custom/mod_redirectionio.soVous pouvez également ajouter cette ligne dans un fichier séparé pour garder une trace de vos propres modifications. La plupart du temps, le fichier de configuration principal d'Apache2 inclut d'autres fichiers (par exemple,
IncludeOptional /etc/apache-custom/conf.d/*.conf) - n'hésitez donc pas à ajouter le vôtre ! -
Redémarrez Apache, et c'est fini !
sudo systemctl restart apache2.service
Vous pouvez vérifier que le module fonctionne parfaitement en terminant ses étapes de configuration dans le VirtualHost.
