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

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

Configuration d’un proxy

NOTE
La prise en charge d’OpenSearch a été ajoutée à la version 2.4.4. OpenSearch est un double compatible d’Elasticsearch. Pour plus d’informations, voir Migration de l’Elasticsearch vers OpenSearch .

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.

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

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.

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

    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
    

    Messages similaires à l’affichage suivant pour indiquer la réussite :

    code language-terminal
    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 :

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

  2. Si nécessaire, 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é, c’est-à-dire qu’il doit commencer par un point.
  4. (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>
    
  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 les contenus suivants (à 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 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;
}
NOTE
Le port d’écoute du moteur de recherche illustré dans l’exemple précédent n’est que 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 pour créer un répertoire dans lequel stocker la configuration de l'authentification :

    code language-bash
    mkdir /etc/nginx/auth/
    
  2. 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;
    }
    
  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 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.

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