Configuration de Nginx 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 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. C’est ce qui est décrit dans Communication sécurisée avec nginx.
Spécifier des fichiers de configuration supplémentaires dans votre configuration globale
Assurez-vous que votre /etc/nginx/nginx.conf
global contient la ligne suivante afin qu’il charge 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 fichier
/etc/nginx/conf.d/magento_es_auth.conf
avec les contenus suivants :code language-conf server { listen 8080; location /_cluster/health { proxy_pass http://localhost:9200/_cluster/health; } }
-
Redémarrez le nginx :
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
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 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 Basic empêche quiconque d’intercepter une communication avec un Elasticsearch ou OpenSearch ou avec votre serveur d’applications.
Étant donné que nginx prend en charge l’authentification HTTP de base, nous vous recommandons de passer par exemple à l’authentification Digest authentication, qui n’est pas recommandée en production.
Ressources supplémentaires :
Pour plus d’informations, reportez-vous aux sections suivantes :
Créer 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 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é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é, c’est-à-dire qu’il doit commencer par un point. -
(facultatif). Pour ajouter un autre utilisateur à votre fichier de mot 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 les contenus suivants :
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 pour créer un répertoire dans lequel stocker la configuration de l'authentification :
code language-bash mkdir /etc/nginx/auth/
-
Utilisez un éditeur de texte pour créer un fichier
/etc/nginx/auth/magento_elasticsearch.conf
avec les contenus suivants :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 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.