Konfigurieren von Nginx für Ihre Suchmaschine

In diesem Thema wird ein Beispiel für das Schützen der Kommunikation zwischen Ihrem Webserver und der Suchmaschine (Elasticsearch oder OpenSearch) mithilfe einer Kombination aus Transport Layer Security (TLS)-Verschlüsselung und HTTP-Basisauthentifizierung erläutert. Sie können optional auch andere Authentifizierungstypen konfigurieren. Für diese Informationen werden Verweise bereitgestellt.

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

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 überschreitet den Rahmen dieses Themas. Wir empfehlen jedoch dringend, ein echtes Zertifikat in der Produktion und kein selbstsigniertes Zertifikat zu verwenden.

  • Ihre Suchmaschine läuft auf demselben Host wie ein Webserver. Das Ausführen der Suchmaschine und des Webservers auf verschiedenen Hosts ist über den Rahmen dieses Themas hinaus möglich.

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

    Wenn die Suchmaschine für das öffentliche 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-Provider zusammen, um zu ermitteln, welche Sicherheitsmaßnahmen Sie implementieren sollten, um Ihre Instanz zu schützen.

Weitere Informationen zu TLS

Sehen Sie sich eine der folgenden Ressourcen an:

Proxy einrichten

NOTE
OpenSearch-Unterstützung wurde in Version 2.4.4 hinzugefügt. OpenSearch ist eine kompatible Abspaltung von Elasticsearch. Weitere Informationen finden Sie unter Migrieren des Elasticsearchs zu OpenSearch .

In diesem Abschnitt wird beschrieben, wie Sie nginx als unsecure -Proxy konfigurieren, damit Adobe Commerce eine Suchmaschine verwenden kann, die auf diesem Server ausgeführt wird. In diesem Abschnitt wird die Einrichtung der einfachen HTTP-Authentifizierung nicht besprochen. Dies wird unter Sichere Kommunikation mit nginx beschrieben.

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

Geben Sie zusätzliche Konfigurationsdateien in Ihrer globalen Konfiguration an

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

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

Einrichten von Nginx als Proxy

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

  1. Verwenden Sie einen Texteditor, um eine Datei /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. Starten Sie nginx neu:

    code language-bash
    service nginx restart
    
  3. Stellen Sie sicher, dass 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, die der folgenden Anzeige ähneln, zeigen Erfolg an:

    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}
    

Sichere Kommunikation mit nginx

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

Da nginx nativ die HTTP Basic-Authentifizierung unterstützt, empfehlen wir sie beispielsweise über Digest-Authentifizierung, was in der Produktion nicht empfohlen wird.

Zusätzliche Ressourcen:

Weitere Informationen finden Sie in den folgenden Abschnitten:

Kennwort erstellen

Es wird empfohlen, Kennwörter für Benutzer mit Zugriff auf Elasticsearch oder OpenSearch mit dem Befehl Apache htpasswd zu kodieren (in diesem Beispiel mit dem Namen magento_elasticsearch ).

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 Verzeichnis "/etc/nginx/passwd", um Kennwörter zu speichern:

    code language-bash
    mkdir -p /etc/nginx/passwd
    
    code language-bash
    htpasswd -c /etc/nginx/passwd/.<filename> <username>
    
    note warning
    WARNING
    Aus Sicherheitsgründen sollte <filename> ausgeblendet werden, d. h. er muss mit einem Punkt beginnen.
  4. (Optional). Um Ihrer Kennwortdatei einen weiteren Benutzer 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.

Zugriff auf nginx einrichten

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

WARNING
Das folgende Beispiel zeigt einen Proxy vom Typ unsecure . Um einen sicheren Proxy zu verwenden, fügen Sie Ihrem sicheren Serverblock den folgenden Inhalt (mit Ausnahme des Überwachungsanschlusses) 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 Listener-Port der Suchmaschine ist nur ein Beispiel. Aus Sicherheitsgründen empfehlen wir die Verwendung eines nicht standardmäßigen Überwachungsports.

Einrichten eines eingeschränkten Kontexts für die Suchmaschine

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

  1. Geben Sie den folgenden Befehl ein, um einen Ordner zum Speichern der Authentifizierungskonfiguration zu erstellen:

    code language-bash
    mkdir /etc/nginx/auth/
    
  2. Verwenden Sie einen Texteditor, um eine Datei /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 einrichten, 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 Basic-Authentifizierung funktioniert:

  • Verwenden eines curl-Befehls zur Überprüfung, dass Sie einen Benutzernamen und ein Kennwort eingeben müssen, um den Clusterstatus zu erhalten
  • Konfigurieren der einfachen HTTP-Authentifizierung im Admin

Verwenden Sie einen curl-Befehl, um den Clusterstatus zu überprüfen.

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 zeigt an, dass die Authentifizierung fehlgeschlagen ist:

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 jetzt 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 einfachen HTTP-Authentifizierung in der Admin-Konsole

Führen Sie dieselben Aufgaben wie in der Konfiguration der Suchmaschine 🔗 beschrieben aus, außer klicken Sie in der Liste Enable HTTP Auth auf Yes und geben Sie Ihren Benutzernamen und Ihr Kennwort in die angegebenen Felder ein.

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

Sie müssen den Cache und die Neuindizierung leeren, bevor Sie fortfahren.

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