Konfigurieren von Apache für Ihre Suchmaschine
- Themen:
- Durchsuchen
Erstellt für:
- Experte
- Admin
- Entwickler
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.
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:
-
Apache
-
Nginx
Proxy einrichten
In diesem Abschnitt wird beschrieben, wie Sie Apache als unsicheren Proxy konfigurieren, sodass 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 Apache“.
Proxy für Apache 2.4 einrichten
In diesem Abschnitt wird beschrieben, wie Sie einen Proxy mit einem virtuellen Host konfigurieren.
-
Aktivieren Sie
mod_proxy
wie folgt:a2enmod proxy_http
-
Öffnen von
/etc/apache2/sites-available/000-default.conf
mit einem Texteditor -
Fügen Sie die folgende -Anweisung am Anfang der Datei hinzu:
Listen 8080
-
Fügen Sie unten in der Datei Folgendes hinzu:
<VirtualHost *:8080> ProxyPass "/" "http://localhost:9200/" ProxyPassReverse "/" "http://localhost:9200/" </VirtualHost>
-
Apache neu starten:
service apache2 restart
-
Überprüfen Sie, ob der Proxy funktioniert, indem Sie den folgenden Befehl eingeben:
curl -i http://localhost:<proxy port>/_cluster/health
Wenn Sie beispielsweise Elasticsearch verwenden und Ihr Proxy Port 8080 verwendet:
curl -i http://localhost:8080/_cluster/health
Meldungen ähnlich der folgenden werden angezeigt, um auf Erfolg hinzuweisen:
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 mithilfe der HTTP Basic-Authentifizierung mit Apache sichern. Weitere Informationen zu Optionen finden Sie in einer der folgenden Ressourcen:
Siehe einen der folgenden Abschnitte:
Passwort erstellen
Aus Sicherheitsgründen können Sie die Kennwortdatei an einer beliebigen Stelle außer dem Stammordner des Webservers finden. In diesem Beispiel zeigen wir, wie die Kennwortdatei in einem neuen Verzeichnis gespeichert wird.
Installieren von htpasswd, falls erforderlich
Überprüfen Sie zunächst, ob das Dienstprogramm Apache htpasswd
wie folgt installiert ist:
-
Geben Sie den folgenden Befehl ein, um festzustellen, ob
htpasswd
bereits installiert ist:which htpasswd
Wenn ein Pfad angezeigt wird, wird er installiert. Wenn der Befehl keine Ausgabe zurückgibt, wird
htpasswd
nicht installiert. -
Installieren Sie bei Bedarf
htpasswd
:- Ubuntu:
apt-get -y install apache2-utils
- CentOS:
yum -y install httpd-tools
- Ubuntu:
Erstellen einer Kennwortdatei
Geben Sie die folgenden Befehle als Benutzer mit root
Berechtigungen ein:
mkdir -p /usr/local/apache/password
htpasswd -c /usr/local/apache/password/.<password file name> <username>
Hierbei gilt
-
<username>
können sein:- Einrichten von cron: der Webserver-Benutzer oder ein anderer Benutzer.
In diesem Beispiel verwenden wir den Webserver-Benutzer, aber die Auswahl des Benutzers liegt bei Ihnen.
- Einrichten des Elasticsearchs: Der Benutzer heißt in diesem Beispiel
magento_elasticsearch
-
<password file name>
muss eine ausgeblendete Datei sein (beginnt mit.
) und sollte den Namen des Benutzers widerspiegeln. Einzelheiten 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
Für Cron müssen Sie die Authentifizierung nur für einen Benutzer einrichten. In diesem Beispiel verwenden wir den Webserver-Benutzer. Um eine Kennwortdatei für den Webserver-Benutzer zu erstellen, geben Sie die folgenden Befehle ein:
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. Um Kennwortdateien für diese Benutzer zu erstellen, geben Sie die folgenden Befehle ein:
mkdir -p /usr/local/apache/password
htpasswd -c /usr/local/apache/password/.htpasswd_elasticsearch magento_elasticsearch
Zusätzliche Benutzer hinzufügen
Um einen weiteren Benutzer zu Ihrer Kennwortdatei hinzuzufügen, geben Sie den folgenden Befehl als Benutzer mit root
Berechtigungen ein:
htpasswd /usr/local/apache/password/.htpasswd <username>
Sichere Kommunikation mit Apache
In diesem Abschnitt wird beschrieben, wie Sie HTTP-Standardauthentifizierung 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.
In diesem Abschnitt wird beschrieben, wie Sie angeben, wer auf den Apache-Server zugreifen kann.
-
Verwenden Sie einen Texteditor, um die folgenden Inhalte zu Ihrem sicheren virtuellen Host hinzuzufügen.
- Apache 2.4:
/etc/apache2/sites-available/default-ssl.conf
bearbeiten
<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>
- Apache 2.4:
-
Wenn Sie das vorherige zu Ihrem sicheren virtuellen Host hinzugefügt haben, entfernen Sie
Listen 8080
und die<VirtualHost *:8080>
Anweisungen, die Sie zuvor zu Ihrem unsicheren virtuellen Host hinzugefügt haben. -
Speichern Sie Ihre Änderungen, beenden Sie den Texteditor und starten Sie Apache neu:
- CentOS:
service httpd restart
- Ubuntu:
service apache2 restart
- CentOS:
Ü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.