[PaaS uniquement]{class="badge informative" title="S’applique uniquement aux projets Adobe Commerce on Cloud (infrastructure PaaS gérée par Adobe) et aux projets On-premise."}

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.)

WARNING
Sauf indication contraire, toutes les commandes de cette rubrique doivent être saisies en tant qu’utilisateur disposant de droits d’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 :

Configuration d’un proxy

NOTE
Ajout de la prise en charge d’OpenSearch dans la version 2.4.4. OpenSearch est un formulaire compatible d’Elasticsearch. Voir Migration d’Elasticsearch vers OpenSearch pour plus d’informations.

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.

NOTE
La raison pour laquelle le proxy n’est pas sécurisé dans cet exemple est qu’il est plus facile à configurer et à vérifier. Vous pouvez utiliser TLS avec ce proxy si vous le souhaitez ; pour ce faire, veillez à ajouter les informations de proxy à la configuration de votre bloc de serveur sécurisé.

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.

  1. 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;
       }
    }
    
  2. Redémarrez Angles :

    code language-bash
    service nginx restart
    
  3. 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 :

  1. 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é.

  2. Au besoin, installez htpasswd :

    • Ubuntu : apt-get -y install apache2-utils
    • CentOS : yum -y install httpd-tools
  3. 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.
  4. (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>
    
  5. 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.

WARNING
L’exemple illustré concerne un proxy non sécurisé. Pour utiliser un proxy sécurisé, ajoutez le contenu suivant (à l’exception du port d’écoute) à votre bloc de serveur sécurisé.

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;
}
NOTE
Le port d’écoute du moteur de recherche illustré dans l’exemple précédent sont uniquement des exemples. Pour des raisons de sécurité, nous vous recommandons d’utiliser un port d’écoute autre que celui par défaut.

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.

  1. Saisissez la commande suivante afin de créer un répertoire pour stocker la configuration d’authentification :

    code language-bash
    mkdir /etc/nginx/auth/
    
  2. 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;
    }
    
  3. Si vous configurez un proxy sécurisé, supprimez /etc/nginx/conf.d/magento_es_auth.conf.

  4. 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.

recommendation-more-help
0f8e7db5-0e9c-4002-a5b8-a0088077d995