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.
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 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.
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.
-
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; } }
-
Nginx neu starten:
code language-bash service nginx restart
-
Ü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:
-
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. -
Installieren Sie bei Bedarf
htpasswd
:- Ubuntu:
apt-get -y install apache2-utils
- CentOS:
yum -y install httpd-tools
- Ubuntu:
-
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. -
(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>
-
Ü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.
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;
}
Einrichten eines eingeschränkten Kontexts für die Suchmaschine
In diesem Abschnitt wird beschrieben, wie Sie angeben, wer auf den Suchmaschinenserver zugreifen kann.
-
Geben Sie den folgenden Befehl ein, um ein Verzeichnis zu erstellen, in dem die Authentifizierungskonfiguration gespeichert wird:
code language-bash mkdir /etc/nginx/auth/
-
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; }
-
Wenn Sie einen sicheren Proxy eingerichtet haben, löschen Sie
/etc/nginx/conf.d/magento_es_auth.conf
. -
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.