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

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

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. Vous pouvez utiliser TLS avec ce proxy. Si vous le souhaitez, veillez à ajouter les informations de proxy à votre configuration d’hôte virtuel sécurisée.

Configurer un proxy pour Apache 2.4

Cette section explique comment configurer un proxy à l’aide d’un hôte virtuel.

  1. Activez mod_proxy comme suit :

    code language-bash
    a2enmod proxy_http
    
  2. Utilisez un éditeur de texte pour ouvrir /etc/apache2/sites-available/000-default.conf

  3. Ajoutez la directive suivante en haut du fichier :

    code language-conf
    Listen 8080
    
  4. Ajoutez les éléments suivants au bas du fichier :

    code language-conf
    <VirtualHost *:8080>
        ProxyPass "/" "http://localhost:9200/"
        ProxyPassReverse "/" "http://localhost:9200/"
    </VirtualHost>
    
  5. Redémarrez Apache :

    code language-bash
    service apache2 restart
    
  6. 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-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 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 :

  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

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>

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

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

  3. Enregistrez vos modifications, quittez l’éditeur de texte, puis redémarrez Apache :

    • CentOS : service httpd restart
    • Ubuntu : service apache2 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