Configuration d’Apache pour votre moteur de recherche
Cette rubrique présente un exemple de sécurisation des communications entre votre serveur web et votre moteur de recherche (Elasticsearch ou OpenSearch) à l’aide d’une combinaison de chiffrement TLS (Transport Layer Security) et d’ 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, SSL (Secure Sockets Layer), est fréquemment utilisé de manière interchangeable avec TLS. Dans cette rubrique, nous faisons référence à TLS.)
root
.Recommendations
Nous vous recommandons ce qui suit :
-
Votre serveur web utilise TLS.
TLS dépasse le cadre de cette rubrique ; toutefois, 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 communications cryptées. Le serveur web du moteur de recherche ne doit pas nécessairement être le même que le serveur web 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 sur votre réseau, cela peut ne pas être nécessaire. Collaborez avec votre fournisseur d’hébergement pour déterminer les mesures de sécurité à implémenter 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. C’est ce qui est décrit 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
-
Utilisez 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 les éléments suivants 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
Messages similaires à l’affichage suivant 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 Basic avec Apache. Pour plus d’options, consultez l’une des ressources suivantes :
Consultez l’une des sections suivantes :
Créer 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 la docroot de votre 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 d’accès s’affiche, il est installé ; si la commande ne renvoie aucune sortie,
htpasswd
n’est pas installé. -
Si nécessaire, 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 des privilèges 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 c’est à vous de choisir l’utilisateur.
- Configuration de l’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. Consultez les exemples plus loin dans cette section pour plus d’informations.
Suivez les invites de votre é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 mot 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 de deux utilisateurs : un avec accès à nginx et un autre avec accès à Elasticsearch. Pour créer des fichiers de mot 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
Ajout d’utilisateurs
Pour ajouter un autre utilisateur à votre fichier de mot 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 Basic empêche quiconque d’intercepter une communication avec un 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
/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
-
Si vous avez ajouté les instructions précédentes à 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 décrit deux manières de vérifier que l’authentification HTTP de base fonctionne :
- Utilisation d’une commande
curl
pour vérifier que vous devez saisir un nom d’utilisateur et un mot de passe pour obtenir l’état du cluster - Configuration de l’authentification HTTP de base dans Admin
Utilisation d’une commande curl
pour vérifier l’état de la grappe
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 à ce qui suit :
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 Admin
Effectuez les mêmes tâches que celles décrites dans la 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 vous assurer qu'il fonctionne, puis sur Save Config.
Vous devez vider le cache et réindexer avant de continuer.