Configuration de Nginx 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 nginx 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, qui est traitée dans la section Communication sécurisée avec nginx.
Spécifiez des fichiers de configuration supplémentaires dans votre configuration globale
Assurez-vous que votre /etc/nginx/nginx.conf
globale contient la ligne suivante afin de charger les autres fichiers de configuration décrits dans les sections suivantes :
include /etc/nginx/conf.d/*.conf;
Configuration de Nginx en tant que proxy
Cette section explique comment spécifier qui peut accéder au serveur Nginx.
-
Utilisez un éditeur de texte pour créer un
/etc/nginx/conf.d/magento_es_auth.conf
de fichier avec le contenu suivant :code language-conf server { listen 8080; location /_cluster/health { proxy_pass http://localhost:9200/_cluster/health; } }
-
Redémarrez Angles :
code language-bash service nginx 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 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 Nginx
Cette section explique comment configurer l’authentification HTTP de base avec votre proxy sécurisé. 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.
Comme nginx prend en charge l’authentification HTTP de base en mode natif, nous vous recommandons de le remplacer, par exemple, par l’authentification Digest, qui n’est pas recommandée en production.
Ressources supplémentaires :
Pour plus d’informations, consultez les sections suivantes :
Création d’un mot de passe
Nous vous recommandons d’utiliser la commande Apache htpasswd
pour coder les mots de passe d’un utilisateur ayant accès à Elasticsearch ou OpenSearch (nommé magento_elasticsearch
dans cet exemple).
Pour créer un mot de passe :
-
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éez un répertoire
/etc/nginx/passwd
pour stocker les mots de passe :code language-bash mkdir -p /etc/nginx/passwd
code language-bash htpasswd -c /etc/nginx/passwd/.<filename> <username>
note warning WARNING Pour des raisons de sécurité, <filename>
doit être masqué ; en d’autres termes, il doit commencer par un point. -
(facultatif). Pour ajouter un autre utilisateur à votre fichier de mots de passe, saisissez la même commande sans l'option
-c
(créer) :code language-bash htpasswd /etc/nginx/passwd/.<filename> <username>
-
Vérifiez que le contenu de
/etc/nginx/passwd
est correct.
Configurer l’accès à Nginx
Cette section explique comment spécifier qui peut accéder au serveur Nginx.
Utilisez un éditeur de texte pour modifier /etc/nginx/conf.d/magento_es_auth.conf
(non sécurisé) ou votre bloc de serveur sécurisé avec le contenu suivant :
server {
listen 8080;
server_name 127.0.0.1;
location / {
limit_except HEAD {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/passwd/.htpasswd_magento_elasticsearch;
}
proxy_pass http://127.0.0.1:9200;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /_aliases {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/passwd/.htpasswd_magento_elasticsearch;
proxy_pass http://127.0.0.1:9200;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
include /etc/nginx/auth/*.conf;
}
Configurer un contexte restreint pour le moteur de recherche
Cette section explique comment spécifier qui peut accéder au serveur du moteur de recherche.
-
Saisissez la commande suivante afin de créer un répertoire pour stocker la configuration d’authentification :
code language-bash mkdir /etc/nginx/auth/
-
Utilisez un éditeur de texte pour créer un
/etc/nginx/auth/magento_elasticsearch.conf
de fichier avec le contenu suivant :code language-conf location /elasticsearch { auth_basic "Restricted - elasticsearch"; auth_basic_user_file /etc/nginx/passwd/.htpasswd_magento_elasticsearch; proxy_pass http://127.0.0.1:9200; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
-
Si vous configurez un proxy sécurisé, supprimez
/etc/nginx/conf.d/magento_es_auth.conf
. -
Redémarrez Nginx et passez à la section suivante :
code language-bash service nginx restart
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.