Konfigurieren von Apache für Ihre Suchmaschine

In diesem Thema wird ein Beispiel für die Sicherung der Kommunikation zwischen Ihrem Webserver und der Suchmaschine (Elasticsearch oder OpenSearch) mithilfe einer Kombination aus Transport Layer Security (TLS)-Verschlüsselung und Grundlegende HTTP-Authentifizierung. 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.

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. Siehe Migrieren des Elasticsearchs zu OpenSearch für weitere Informationen.

In diesem Abschnitt wird beschrieben, wie Sie Apache als unsecure , 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, wie hier beschrieben: Sichere Kommunikation mit Apache.

NOTE
Der Grund, warum der Proxy in diesem Beispiel nicht gesichert ist, ist, dass die Einrichtung und Überprüfung einfacher ist. Sie können TLS mit diesem Proxy verwenden. Wenn Sie dies wünschen, stellen Sie sicher, dass Sie die Proxy-Informationen zu Ihrer sicheren Virtual-Host-Konfiguration hinzufügen.

Proxy für Apache 2.4 einrichten

In diesem Abschnitt wird beschrieben, wie Sie einen Proxy mit einem virtuellen Host konfigurieren.

  1. Aktivieren mod_proxy wie folgt:

    code language-bash
    a2enmod proxy_http
    
  2. Öffnen Sie mithilfe eines Texteditors /etc/apache2/sites-available/000-default.conf

  3. Fügen Sie oben in der Datei die folgende Anweisung hinzu:

    code language-conf
    Listen 8080
    
  4. Fügen Sie am Ende der Datei Folgendes hinzu:

    code language-conf
    <VirtualHost *:8080>
        ProxyPass "/" "http://localhost:9200/"
        ProxyPassReverse "/" "http://localhost:9200/"
    </VirtualHost>
    
  5. Starten Sie Apache neu:

    code language-bash
    service apache2 restart
    
  6. 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 Sie beispielsweise Elasticsearch verwenden und Ihr Proxy 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 Apache

In diesem Abschnitt wird beschrieben, wie Sie die Kommunikation zwischen Apache und der Suchmaschine mit HTTP Basic Authentifizierung mit Apache. Weitere Optionen finden Sie in einer der folgenden Ressourcen:

Siehe einen der folgenden Abschnitte:

Kennwort erstellen

Aus Sicherheitsgründen können Sie die Kennwortdatei an einer beliebigen Stelle außerhalb des Basisverzeichnisses für Ihren Webserver finden. In diesem Beispiel wird gezeigt, wie die Kennwortdatei in einem neuen Verzeichnis gespeichert wird.

Installieren Sie bei Bedarf htpasswd

Überprüfen Sie zunächst, ob Sie über den Apache verfügen. htpasswd Das Dienstprogramm wird wie folgt installiert:

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

    code language-bash
    which htpasswd
    

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

  2. Installieren Sie bei Bedarf htpasswd:

    • Ubuntu: apt-get -y install apache2-utils
    • CentOS: yum -y install httpd-tools

Kennwortdatei erstellen

Geben Sie die folgenden Befehle als Benutzer mit root -Berechtigungen:

mkdir -p /usr/local/apache/password
htpasswd -c /usr/local/apache/password/.<password file name> <username>

Wo

  • <username> kann sein:

    • Einrichten von Cron: der Webserver-Benutzer oder ein anderer Benutzer.

    In diesem Beispiel verwenden wir den Webserver-Benutzer, aber die Wahl des Benutzers liegt bei Ihnen.

    • Einrichten eines Elasticsearchs: Der Benutzer hat den Namen magento_elasticsearch in diesem Beispiel
  • <password file name> muss eine ausgeblendete Datei sein (beginnt mit .) und sollte den Namen des Benutzers widerspiegeln. Weitere Informationen finden Sie in den Beispielen weiter unten in diesem Abschnitt .

Befolgen Sie die Anweisungen auf Ihrem Bildschirm, um ein Kennwort für den Benutzer zu erstellen.

Beispiele

Beispiel 1: cron
Sie müssen die Authentifizierung nur für einen Benutzer für Cron einrichten. In diesem Beispiel verwenden wir den Webserver-Benutzer. Geben Sie die folgenden Befehle ein, um eine Kennwortdatei für den Webserver-Benutzer zu erstellen:

mkdir -p /usr/local/apache/password
htpasswd -c /usr/local/apache/password/.htpasswd apache

Beispiel 2: Elasticsearch
Sie müssen die Authentifizierung für zwei Benutzer einrichten: einen mit Zugriff auf nginx und einen mit Zugriff auf Elasticsearch. Geben Sie die folgenden Befehle ein, um Kennwortdateien für diese Benutzer zu erstellen:

mkdir -p /usr/local/apache/password
htpasswd -c /usr/local/apache/password/.htpasswd_elasticsearch magento_elasticsearch

Zusätzliche Benutzer hinzufügen

Um Ihrer Kennwortdatei einen weiteren Benutzer hinzuzufügen, geben Sie den folgenden Befehl als Benutzer mit ein: root -Berechtigungen:

htpasswd /usr/local/apache/password/.htpasswd <username>

Sichere Kommunikation mit Apache

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

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

  1. Verwenden Sie einen Texteditor, um Ihrem sicheren virtuellen Host die folgenden Inhalte hinzuzufügen.

    • Apache 2.4: Bearbeiten /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. Wenn Sie den vorherigen zu Ihrem sicheren virtuellen Host hinzugefügt haben, entfernen Sie Listen 8080 und <VirtualHost *:8080> Direktiven, die Sie Ihrem unsicheren virtuellen Host bereits hinzugefügt haben.

  3. Speichern Sie Ihre Änderungen, beenden Sie den Texteditor und starten Sie Apache neu:

    • CentOS: service httpd restart
    • Ubuntu: service apache2 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 -Befehl, um zu überprüfen, dass Sie einen Benutzernamen und ein Kennwort eingeben müssen, um den Cluster-Status zu erhalten
  • Konfigurieren der einfachen HTTP-Authentifizierung im Admin

Verwenden Sie eine curl Befehl zum Überprüfen des Clusterstatus

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 unter Suchmaschinenkonfiguration Außer click Yes aus dem Enable HTTP Auth und geben Sie Ihren Benutzernamen und Ihr Passwort in die entsprechenden Felder ein.

Klicks Test Connection , um sicherzustellen, dass sie funktioniert, klicken Sie auf Save Config.

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

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