Configuration d’Apache pour votre moteur de recherche
Cette rubrique présente un exemple de sécurisation de la communication entre votre serveur web et votre moteur de recherche (Elasticsearch ou OpenSearch) à l’aide d’une combinaison du chiffrement TLS (Transport Layer Security) et de l’authentification de base HTTP. Vous pouvez également configurer d’autres types d’authentification ; nous fournissons des références pour ces informations.
(Un terme plus ancien, Secure Sockets Layer (SSL), est souvent utilisé de manière interchangeable avec TLS. Dans cette rubrique, nous nous référons à TLS.)
root
.Recommendations
Nous recommandons ce qui suit :
-
Votre serveur web utilise TLS.
TLS dépasse le cadre de cette rubrique. Cependant, nous vous recommandons vivement d’utiliser un certificat réel en production et non un certificat auto-signé.
-
Votre moteur de recherche s’exécute sur le même hôte qu’un serveur web. L’exécution du moteur de recherche et du serveur web sur différents hôtes dépasse le cadre de cette rubrique.
L’avantage de placer le moteur de recherche et le serveur web sur le même hôte est qu’il rend impossible l’interception de la communication chiffrée. Le serveur web du moteur de recherche ne doit pas nécessairement être identique au serveur web d’Adobe Commerce. Par exemple, Adobe Commerce peut exécuter Apache et Elasticsearch/OpenSearch peut exécuter nginx.
Si le moteur de recherche est exposé au Web public, vous devez configurer l’authentification. Si votre instance de moteur de recherche est protégée au sein de votre réseau, cela peut ne pas être nécessaire. Contactez votre fournisseur d’hébergement pour déterminer les mesures de sécurité à mettre en œuvre pour protéger votre instance.
Plus d’informations sur TLS
Consultez l’une des ressources suivantes :
-
Apache
-
Nginx
Configuration d’un proxy
Cette section explique comment configurer Apache en tant que proxy non sécurisé afin qu’Adobe Commerce puisse utiliser un moteur de recherche s’exécutant sur ce serveur. Cette section ne traite pas de la configuration de l’authentification HTTP de base. Elle est traitée dans la section Communication sécurisée avec Apache.
Configurer un proxy pour Apache 2.4
Cette section explique comment configurer un proxy à l’aide d’un hôte virtuel.
-
Activez
mod_proxy
comme suit :code language-bash a2enmod proxy_http
-
Utiliser un éditeur de texte pour ouvrir
/etc/apache2/sites-available/000-default.conf
-
Ajoutez la directive suivante en haut du fichier :
code language-conf Listen 8080
-
Ajoutez ce qui suit au bas du fichier :
code language-conf <VirtualHost *:8080> ProxyPass "/" "http://localhost:9200/" ProxyPassReverse "/" "http://localhost:9200/" </VirtualHost>
-
Redémarrez Apache :
code language-bash service apache2 restart
-
Vérifiez que le proxy fonctionne en saisissant la commande suivante :
code language-bash curl -i http://localhost:<proxy port>/_cluster/health
Par exemple, si vous utilisez Elasticsearch et que votre proxy utilise le port 8080 :
code language-bash curl -i http://localhost:8080/_cluster/health
Des messages similaires à ce qui suit s’affichent pour indiquer la réussite :
code language-none HTTP/1.1 200 OK Date: Tue, 23 Feb 2019 20:38:03 GMT Content-Type: application/json; charset=UTF-8 Content-Length: 389 Connection: keep-alive {"cluster_name":"elasticsearch","status":"yellow","timed_out":false,"number_of_nodes":1,"number_of_data_nodes":1,"active_primary_shards":5,"active_shards":5,"relocating_shards":0,"initializing_shards":0,"unassigned_shards":5,"delayed_unassigned_shards":0,"number_of_pending_tasks":0,"number_of_in_flight_fetch":0,"task_max_waiting_in_queue_millis":0,"active_shards_percent_as_number":50.0}
Communication sécurisée avec Apache
Cette section explique comment sécuriser la communication entre Apache et le moteur de recherche à l’aide de l’authentification HTTP de base avec Apache. Pour plus d’options, consultez l’une des ressources suivantes :
Consultez l’une des sections suivantes :
Création d’un mot de passe
Pour des raisons de sécurité, vous pouvez localiser le fichier de mot de passe n’importe où, à l’exception de votre racine de serveur web. Dans cet exemple, nous montrons comment stocker le fichier de mot de passe dans un nouveau répertoire.
Installez htpasswd si nécessaire.
Tout d’abord, vérifiez si l’utilitaire Apache htpasswd
est installé comme suit :
-
Saisissez la commande suivante pour déterminer si
htpasswd
est déjà installé :code language-bash which htpasswd
Si un chemin s’affiche, il est installé ; si la commande ne renvoie aucune sortie,
htpasswd
n’est pas installé. -
Au besoin, installez
htpasswd
:- Ubuntu :
apt-get -y install apache2-utils
- CentOS :
yum -y install httpd-tools
- Ubuntu :
Créer un fichier de mot de passe
Saisissez les commandes suivantes en tant qu’utilisateur disposant de droits d’root
:
mkdir -p /usr/local/apache/password
htpasswd -c /usr/local/apache/password/.<password file name> <username>
Où
-
<username>
peut être :- Configuration de cron : utilisateur du serveur web ou autre utilisateur.
Dans cet exemple, nous utilisons l’utilisateur du serveur web, mais le choix de l’utilisateur ou de l’utilisatrice dépend de vous.
- Configuration d’Elasticsearch : l’utilisateur est nommé
magento_elasticsearch
dans cet exemple
-
<password file name>
doit être un fichier masqué (commence par.
) et doit refléter le nom de l’utilisateur. Voir les exemples plus loin dans cette section pour plus d’informations.
Suivez les invites à l'écran pour créer un mot de passe pour l'utilisateur.
Exemples
Exemple 1 : cron
Vous ne devez configurer l’authentification que pour un seul utilisateur pour cron. Dans cet exemple, nous utilisons l’utilisateur du serveur web. Pour créer un fichier de mots de passe pour l'utilisateur du serveur web, saisissez les commandes suivantes :
mkdir -p /usr/local/apache/password
htpasswd -c /usr/local/apache/password/.htpasswd apache
Exemple 2 : Elasticsearch
Vous devez configurer l’authentification pour deux utilisateurs : l’un ayant accès à nginx et l’autre ayant accès à Elasticsearch. Pour créer des fichiers de mots de passe pour ces utilisateurs, saisissez les commandes suivantes :
mkdir -p /usr/local/apache/password
htpasswd -c /usr/local/apache/password/.htpasswd_elasticsearch magento_elasticsearch
Ajouter des utilisateurs supplémentaires
Pour ajouter un autre utilisateur à votre fichier de mots de passe, saisissez la commande suivante en tant qu’utilisateur disposant des privilèges root
:
htpasswd /usr/local/apache/password/.htpasswd <username>
Communication sécurisée avec Apache
Cette section explique comment configurer l’authentification HTTP de base. L’utilisation conjointe de l’authentification TLS et HTTP de base empêche quiconque d’intercepter la communication avec Elasticsearch ou OpenSearch ou avec votre serveur d’applications.
Cette section explique comment spécifier qui peut accéder au serveur Apache.
-
Utilisez un éditeur de texte pour ajouter le contenu suivant à votre hôte virtuel sécurisé.
- Apache 2.4 : Modifier le
/etc/apache2/sites-available/default-ssl.conf
code language-conf <Proxy *> Order deny,allow Allow from all AuthType Basic AuthName "Elasticsearch Server" # or OpenSearch Server AuthBasicProvider file AuthUserFile /usr/local/apache/password/.htpasswd_elasticsearch Require valid-user # This allows OPTIONS-requests without authorization <LimitExcept OPTIONS> Require valid-user </LimitExcept> </Proxy>
- Apache 2.4 : Modifier le
-
Si vous avez ajouté le précédent à votre hôte virtuel sécurisé, supprimez
Listen 8080
et les directives<VirtualHost *:8080>
que vous avez ajoutées précédemment à votre hôte virtuel non sécurisé. -
Enregistrez vos modifications, quittez l’éditeur de texte, puis redémarrez Apache :
- CentOS :
service httpd restart
- Ubuntu :
service apache2 restart
- CentOS :
Vérifier
Cette section présente deux façons de vérifier que l’authentification HTTP de base fonctionne :
- À l’aide d’une commande
curl
pour vérifier, vous devez saisir un nom d’utilisateur et un mot de passe pour obtenir le statut du cluster - Configuration de l’authentification HTTP de base dans l’administration
Utilisez une commande curl
pour vérifier l’état du cluster
Saisissez la commande suivante :
curl -i http://<hostname, ip, or localhost>:<proxy port>/_cluster/health
Par exemple, si vous saisissez la commande sur le serveur du moteur de recherche et que votre proxy utilise le port 8080 :
curl -i http://localhost:8080/_cluster/health
Le message suivant s’affiche pour indiquer que l’authentification a échoué :
HTTP/1.1 401 Unauthorized
Date: Tue, 23 Feb 2016 20:35:29 GMT
Content-Type: text/html
Content-Length: 194
Connection: keep-alive
WWW-Authenticate: Basic realm="Restricted"
<html>
<head><title>401 Authorization Required</title></head>
<body bgcolor="white">
<center><h1>401 Authorization Required</h1></center>
</body>
</html>
Essayez maintenant la commande suivante :
curl -i -u <username>:<password> http://<hostname, ip, or localhost>:<proxy port>/_cluster/health
Par exemple :
curl -i -u magento_elasticsearch:mypassword http://localhost:8080/_cluster/health
Cette fois, la commande réussit avec un message similaire à celui-ci :
HTTP/1.1 200 OK
Date: Tue, 23 Feb 2016 20:38:03 GMT
Content-Type: application/json; charset=UTF-8
Content-Length: 389
Connection: keep-alive
{"cluster_name":"elasticsearch","status":"yellow","timed_out":false,"number_of_nodes":1,"number_of_data_nodes":1,"active_primary_shards":5,"active_shards":5,"relocating_shards":0,"initializing_shards":0,"unassigned_shards":5,"delayed_unassigned_shards":0,"number_of_pending_tasks":0,"number_of_in_flight_fetch":0,"task_max_waiting_in_queue_millis":0,"active_shards_percent_as_number":50.0}
Configuration de l’authentification HTTP de base dans l’administration
Effectuez les mêmes tâches que celles décrites dans Configuration du moteur de recherche sauf cliquez sur Yes dans la liste Enable HTTP Auth et saisissez votre nom d’utilisateur et votre mot de passe dans les champs fournis.
Cliquez sur Test Connection pour vérifier que cela fonctionne, puis sur Save Config.
Vous devez vider le cache et réindexer avant de continuer.