Konfigurieren von Nginx 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.
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:
-
Apache
-
Nginx
Proxy einrichten
In diesem Abschnitt wird beschrieben, wie Sie nginx 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 nginx.
Geben Sie zusätzliche Konfigurationsdateien in Ihrer globalen Konfiguration an
Sicherstellen der globalen /etc/nginx/nginx.conf
enthält die folgende Zeile, sodass sie die anderen Konfigurationsdateien lädt, 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.
-
Verwenden eines Texteditors zum Erstellen einer Datei
/etc/nginx/conf.d/magento_es_auth.conf
mit folgendem Inhalt:code language-conf server { listen 8080; location /_cluster/health { proxy_pass http://localhost:9200/_cluster/health; } }
-
Starten Sie nginx neu:
code language-bash service nginx restart
-
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-Authentifizierung mit Ihrem sicheren Proxy. 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 Digest Authentication, was in der Produktion nicht empfohlen wird.
Zusätzliche Ressourcen:
Weitere Informationen finden Sie in den folgenden Abschnitten:
Kennwort erstellen
Es wird empfohlen, den Apache zu verwenden htpasswd
-Befehl zum Kodieren von Kennwörtern für Benutzer mit Zugriff auf Elasticsearch oder OpenSearch (mit dem Namen magento_elasticsearch
in diesem Beispiel).
So erstellen Sie ein Kennwort:
-
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. -
Installieren Sie bei Bedarf
htpasswd
:- Ubuntu:
apt-get -y install apache2-utils
- CentOS:
yum -y install httpd-tools
- Ubuntu:
-
Erstellen Sie eine
/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 <filename>
sollte ausgeblendet werden, d. h. sie muss mit einem Punkt beginnen. -
(Optional). Um Ihrer Kennwortdatei einen weiteren Benutzer hinzuzufügen, geben Sie denselben Befehl ohne die
-c
(Erstellen):code language-bash htpasswd /etc/nginx/passwd/.<filename> <username>
-
Ü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.
Verwenden Sie einen Texteditor, um entweder /etc/nginx/conf.d/magento_es_auth.conf
(unsecure) oder Ihrem sicheren Server-Block mit folgendem Inhalt:
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 festlegen, wer auf den Suchmaschinenserver zugreifen kann.
-
Geben Sie den folgenden Befehl ein, um einen Ordner zum Speichern der Authentifizierungskonfiguration zu erstellen:
code language-bash mkdir /etc/nginx/auth/
-
Verwenden eines Texteditors zum Erstellen einer Datei
/etc/nginx/auth/magento_elasticsearch.conf
mit folgendem Inhalt: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 einrichten, 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 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.