Konfigurieren von Nginx für Ihre Suchmaschine

In diesem Abschnitt wird ein Beispiel für die Sicherung der Kommunikation zwischen dem Webserver und der Suchmaschine (Elasticsearch oder OpenSearch) mithilfe einer Kombination aus TLS-Verschlüsselung (Transport Layer Security) und HTTP-Standardauthentifizierung erläutert. Sie können optional auch andere Authentifizierungstypen konfigurieren. Wir stellen Verweise für diese Informationen bereit.

(Ein älterer Begriff, Secure Sockets Layer (SSL), wird häufig synonym mit TLS verwendet. In diesem Thema wird auf TLS verwiesen.

WARNING
Sofern nicht anders angegeben, müssen alle Befehle in diesem Thema als Benutzer mit root Berechtigungen eingegeben werden.

Recommendations

Wir empfehlen Folgendes:

  • Ihr Webserver verwendet TLS.

    TLS sprengt den Rahmen dieses Themas. Wir empfehlen jedoch dringend, in der Produktion ein echtes Zertifikat und kein selbstsigniertes Zertifikat zu verwenden.

  • Ihre Suchmaschine wird auf demselben Host wie ein Webserver ausgeführt. Das Ausführen der Suchmaschine und des Webservers auf verschiedenen Hosts würde den Rahmen dieses Themas sprengen.

    Der Vorteil, dass Suchmaschinen und Webserver auf denselben Host gesetzt werden, besteht darin, dass das Abfangen verschlüsselter Kommunikation unmöglich wird. Der Suchmaschinen-Webserver muss nicht mit dem Adobe Commerce-Webserver identisch sein. Beispielsweise kann Adobe Commerce Apache ausführen und Elasticsearch/OpenSearch kann nginx ausführen.

    Wenn die Suchmaschine im öffentlichen Web verfügbar gemacht wird, sollten Sie die Authentifizierung konfigurieren. Wenn Ihre Suchmaschineninstanz in Ihrem Netzwerk geschützt ist, ist dies möglicherweise nicht erforderlich. Arbeiten Sie mit Ihrem Hosting-Anbieter zusammen, um zu bestimmen, welche Sicherheitsmaßnahmen Sie zum Schutz Ihrer Instanz implementieren sollten.

Weitere Informationen zu TLS

Siehe eine der folgenden Ressourcen:

Proxy einrichten

NOTE
OpenSearch-Unterstützung wurde in 2.4.4 hinzugefügt. OpenSearch ist eine kompatible Form of Elasticsearch. Weitere finden Sie unter "Elasticsearch nachmigrieren“.

In diesem Abschnitt wird beschrieben, wie Sie Nginx als unsicheren-Proxy konfigurieren, damit Adobe Commerce eine auf diesem Server ausgeführte Suchmaschine verwenden kann. In diesem Abschnitt wird nicht beschrieben, wie Sie die HTTP-Standardauthentifizierung einrichten. Dies wird unter Sichere Kommunikation mit nginx erläutert.

NOTE
Der Grund, warum der Proxy in diesem Beispiel nicht gesichert ist, liegt darin, dass die Einrichtung und Überprüfung einfacher ist. Sie können bei Bedarf TLS mit diesem Proxy verwenden. Stellen Sie sicher, dass Sie die Proxy-Informationen zu Ihrer Konfiguration des sicheren Serverblocks hinzufügen.

Angeben zusätzlicher Konfigurationsdateien in Ihrer globalen Konfiguration

Stellen Sie sicher, dass die globale /etc/nginx/nginx.conf die folgende Zeile enthält, damit die anderen Konfigurationsdateien geladen werden, die in den folgenden Abschnitten beschrieben werden:

include /etc/nginx/conf.d/*.conf;

Einrichten von nginx als Proxy

In diesem Abschnitt wird beschrieben, wie Sie angeben, wer auf den nginx-Server zugreifen kann.

  1. Verwenden Sie einen Texteditor, um eine /etc/nginx/conf.d/magento_es_auth.conf mit folgendem Inhalt zu erstellen:

    code language-conf
    server {
       listen 8080;
       location /_cluster/health {
          proxy_pass http://localhost:9200/_cluster/health;
       }
    }
    
  2. Nginx neu starten:

    code language-bash
    service nginx restart
    
  3. Überprüfen Sie, ob der Proxy funktioniert, indem Sie den folgenden Befehl eingeben:

    code language-bash
    curl -i http://localhost:<proxy port>/_cluster/health
    

    Wenn Ihr Proxy beispielsweise Port 8080 verwendet:

    code language-bash
    curl -i http://localhost:8080/_cluster/health
    

    Meldungen ähnlich der folgenden werden angezeigt, um auf Erfolg hinzuweisen:

    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}
    

Sichere Kommunikation mit nginx

In diesem Abschnitt wird beschrieben, wie Sie HTTP-Standardauthentifizierung mit Ihrem sicheren Proxy einrichten. Durch die gemeinsame Verwendung von TLS und HTTP Basic-Authentifizierung wird verhindert, dass eine Person die Kommunikation mit Elasticsearch oder OpenSearch oder mit Ihrem Anwendungsserver abfängt.

Da nginx nativ die HTTP-Standardauthentifizierung unterstützt, empfehlen wir diese über z. B. Digest-Authentifizierung, was in der Produktion nicht empfohlen wird.

Zusätzliche Ressourcen:

Weitere Informationen finden Sie in den folgenden Abschnitten:

Passwort erstellen

Es wird empfohlen, den Apache htpasswd-Befehl zu verwenden, um Kennwörter für Benutzende mit Zugriff auf Elasticsearch oder OpenSearch (in diesem Beispiel magento_elasticsearch genannt) zu kodieren.

So erstellen Sie ein Kennwort:

  1. Geben Sie den folgenden Befehl ein, um festzustellen, ob htpasswd bereits installiert ist:

    code language-bash
    which htpasswd
    

    Wenn ein Pfad angezeigt wird, wird er installiert. Wenn der Befehl keine Ausgabe zurückgibt, wird htpasswd nicht installiert.

  2. Installieren Sie bei Bedarf htpasswd:

    • Ubuntu: apt-get -y install apache2-utils
    • CentOS: yum -y install httpd-tools
  3. Erstellen Sie ein /etc/nginx/passwd Verzeichnis zum Speichern von Kennwörtern:

    code language-bash
    mkdir -p /etc/nginx/passwd
    
    code language-bash
    htpasswd -c /etc/nginx/passwd/.<filename> <username>
    
    note warning
    WARNING
    Aus Sicherheitsgründen sollten <filename> ausgeblendet sein. Das heißt, sie müssen mit einem Punkt beginnen.
  4. (optional). Um einen weiteren Benutzer zu Ihrer Kennwortdatei hinzuzufügen, geben Sie denselben Befehl ohne die Option -c (Erstellen) ein:

    code language-bash
    htpasswd /etc/nginx/passwd/.<filename> <username>
    
  5. Überprüfen Sie, ob der Inhalt von /etc/nginx/passwd korrekt ist.

Einrichten des Zugriffs auf nginx

In diesem Abschnitt wird beschrieben, wie Sie angeben, wer auf den nginx-Server zugreifen kann.

WARNING
Das folgende Beispiel bezieht sich auf einen unsicheren Proxy. Um einen sicheren Proxy zu verwenden, fügen Sie die folgenden Inhalte (mit Ausnahme des Listen-Ports) zu Ihrem sicheren Serverblock hinzu.

Verwenden Sie einen Texteditor, um entweder /etc/nginx/conf.d/magento_es_auth.conf (unsicher) oder Ihren sicheren Serverblock mit den folgenden Inhalten zu ändern:

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
Der im vorherigen Beispiel dargestellte Listen-Port für Suchmaschinen ist nur ein Beispiel. Aus Sicherheitsgründen empfehlen wir die Verwendung eines nicht standardmäßigen Listen-Ports.

Einrichten eines eingeschränkten Kontexts für die Suchmaschine

In diesem Abschnitt wird beschrieben, wie Sie angeben, wer auf den Suchmaschinenserver zugreifen kann.

  1. Geben Sie den folgenden Befehl ein, um ein Verzeichnis zu erstellen, in dem die Authentifizierungskonfiguration gespeichert wird:

    code language-bash
    mkdir /etc/nginx/auth/
    
  2. Verwenden Sie einen Texteditor, um eine /etc/nginx/auth/magento_elasticsearch.conf mit folgendem Inhalt zu erstellen:

    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. Wenn Sie einen sicheren Proxy eingerichtet haben, löschen Sie /etc/nginx/conf.d/magento_es_auth.conf.

  4. Starten Sie nginx neu und fahren Sie mit dem nächsten Abschnitt fort:

    code language-bash
    service nginx restart
    

Überprüfen

In diesem Abschnitt werden zwei Möglichkeiten erläutert, um zu überprüfen, ob die HTTP-Standardauthentifizierung funktioniert:

  • Verwenden eines curl-Befehls zur Überprüfung, ob Sie einen Benutzernamen und ein Kennwort eingeben müssen, um den Cluster-Status zu erhalten
  • Konfigurieren der HTTP-Standardauthentifizierung in der Admin Console

Verwenden eines curl Befehls zum Überprüfen des Cluster-Status

Geben Sie den folgenden Befehl ein:

curl -i http://<hostname, ip, or localhost>:<proxy port>/_cluster/health

Wenn Sie beispielsweise den Befehl auf dem Suchmaschinenserver eingeben und Ihr Proxy Port 8080 verwendet:

curl -i http://localhost:8080/_cluster/health

Die folgende Meldung wird angezeigt, um auf fehlgeschlagene Authentifizierung hinzuweisen:

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>

Versuchen Sie nun den folgenden Befehl:

curl -i -u <username>:<password> http://<hostname, ip, or localhost>:<proxy port>/_cluster/health

Beispiel:

curl -i -u magento_elasticsearch:mypassword http://localhost:8080/_cluster/health

Diesmal ist der Befehl erfolgreich mit einer Meldung ähnlich der folgenden:

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}

Konfigurieren der HTTP-Standardauthentifizierung in der Admin Console

Führen Sie dieselben Aufgaben aus wie unter Suchmaschinenkonfiguration außer klicken Sie Yes in der Enable HTTP Auth Liste und geben Sie Ihren Benutzernamen und Ihr Kennwort in die entsprechenden Felder ein.

Klicken Sie auf Test Connection , um sicherzustellen, dass es funktioniert, und klicken Sie dann auf Save Config.

Sie müssen den Cache leeren und neu indizieren, bevor Sie fortfahren.

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