Konfigurera Apache för sökmotorn
I det här avsnittet beskrivs ett exempel på hur du säkrar kommunikationen mellan webbservern och sökmotorn (Elasticsearch eller OpenSearch) med en kombination av TLS-kryptering och grundläggande HTTP-autentisering. Du kan även konfigurera andra typer av autentisering. Vi tillhandahåller referenser för den informationen.
(En äldre term, Secure Sockets Layer (SSL), används ofta som synonymer med TLS. I det här avsnittet hänvisar vi till TLS.)
root
-behörighet.Recommendations
Vi rekommenderar följande:
-
Din webbserver använder TLS.
TLS ligger utanför det här ämnesområdet, men vi rekommenderar starkt att du använder ett riktigt certifikat i produktionen och inte ett självsignerat certifikat.
-
Sökmotorn körs på samma värd som en webbserver. Det här avsnittet gäller inte för körning av sökmotorn och webbservern på olika värdar.
Fördelen med att lägga sökmotorn och webbservern på samma värd är att det inte går att fånga upp krypterad kommunikation. Sökmotorns webbserver behöver inte vara samma som Adobe Commerce webbserver. Adobe Commerce kan till exempel köra Apache och Elasticsearch/OpenSearch kan köra nginx.
Om sökmotorn exponeras för den offentliga webben bör du konfigurera autentiseringen. Om sökmotorinstansen är skyddad i nätverket behöver du inte göra det. Samarbeta med din värdleverantör för att ta reda på vilka säkerhetsåtgärder du bör vidta för att skydda din instans.
Mer information om TLS
Se någon av följande resurser:
-
Apache
-
Nginx
Konfigurera en proxy
I det här avsnittet beskrivs hur du konfigurerar Apache som en osäker -proxy så att Adobe Commerce kan använda en sökmotor som körs på den här servern. I det här avsnittet beskrivs inte konfigurering av grundläggande HTTP-autentisering. Det beskrivs i Säker kommunikation med Apache.
Konfigurera en proxy för Apache 2.4
I det här avsnittet beskrivs hur du konfigurerar en proxy med hjälp av ett virtuellt värdsystem.
-
Aktivera
mod_proxy
enligt följande:code language-bash a2enmod proxy_http
-
Öppna
/etc/apache2/sites-available/000-default.conf
med en textredigerare -
Lägg till följande direktiv högst upp i filen:
code language-conf Listen 8080
-
Lägg till följande längst ned i filen:
code language-conf <VirtualHost *:8080> ProxyPass "/" "http://localhost:9200/" ProxyPassReverse "/" "http://localhost:9200/" </VirtualHost>
-
Starta om Apache:
code language-bash service apache2 restart
-
Kontrollera att proxyn fungerar genom att ange följande kommando:
code language-bash curl -i http://localhost:<proxy port>/_cluster/health
Om du till exempel använder Elasticsearch och din proxy använder port 8080:
code language-bash curl -i http://localhost:8080/_cluster/health
Meddelanden som liknar följande för att visa om det lyckades:
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}
Säker kommunikation med Apache
I det här avsnittet beskrivs hur du skyddar kommunikationen mellan Apache och sökmotorn med hjälp av HTTP Basic -autentisering med Apache. Mer information finns i följande resurser:
Se något av följande avsnitt:
Skapa ett lösenord
Av säkerhetsskäl kan du hitta lösenordsfilen var som helst, förutom webbserverns dokumentmapp. I det här exemplet visas hur du sparar lösenordsfilen i en ny katalog.
Installera htpassword om det behövs
Kontrollera först om du har Apache htpasswd
-verktyget installerat enligt följande:
-
Ange följande kommando för att avgöra om
htpasswd
redan är installerat:code language-bash which htpasswd
Om en sökväg visas installeras den. Om kommandot inte returnerar några utdata installeras inte
htpasswd
. -
Installera
htpasswd
om det behövs:- Ubuntu:
apt-get -y install apache2-utils
- CentOS:
yum -y install httpd-tools
- Ubuntu:
Skapa en lösenordsfil
Ange följande kommandon som en användare med behörigheten root
:
mkdir -p /usr/local/apache/password
htpasswd -c /usr/local/apache/password/.<password file name> <username>
Plats
-
<username>
kan vara:- Konfigurera cron: webbserveranvändaren eller en annan användare.
I det här exemplet använder vi webbserveranvändaren, men det är upp till dig att välja användare.
- Konfigurera Elasticsearch: användaren har namnet
magento_elasticsearch
i det här exemplet
-
<password file name>
måste vara en dold fil (börjar med.
) och ska återspegla användarens namn. Mer information finns i exemplen senare i det här avsnittet.
Följ instruktionerna på skärmen för att skapa ett lösenord för användaren.
Exempel
Exempel 1: cron
Du måste konfigurera autentisering för endast en användare för cron. I det här exemplet använder vi webbserveranvändaren. Om du vill skapa en lösenordsfil för webbserveranvändaren anger du följande kommandon:
mkdir -p /usr/local/apache/password
htpasswd -c /usr/local/apache/password/.htpasswd apache
Exempel 2: Elasticsearch
Du måste konfigurera autentisering för två användare: en med åtkomst till nginx och en med åtkomst till Elasticsearch. Om du vill skapa lösenordsfiler för dessa användare anger du följande kommandon:
mkdir -p /usr/local/apache/password
htpasswd -c /usr/local/apache/password/.htpasswd_elasticsearch magento_elasticsearch
Lägg till ytterligare användare
Om du vill lägga till en annan användare i lösenordsfilen anger du följande kommando som en användare med root
-behörighet:
htpasswd /usr/local/apache/password/.htpasswd <username>
Säker kommunikation med Apache
I det här avsnittet beskrivs hur du konfigurerar grundläggande HTTP-autentisering. Användning av TLS och HTTP Basic-autentisering tillsammans förhindrar alla från att kommunicera med Elasticsearch eller OpenSearch eller med programservern.
I det här avsnittet beskrivs hur du anger vilka som får åtkomst till Apache-servern.
-
Använd en textredigerare för att lägga till följande innehåll i det säkra virtuella värdsystemet.
- Apache 2.4: Redigera
/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>
- Apache 2.4: Redigera
-
Om du har lagt till föregående till din säkra virtuella värd tar du bort
Listen 8080
och de<VirtualHost *:8080>
-direktiv som du har lagt till tidigare till din osäkra virtuella värd. -
Spara ändringarna, avsluta textredigeraren och starta om Apache:
- CentOS:
service httpd restart
- Ubuntu:
service apache2 restart
- CentOS:
Verifiera
I det här avsnittet beskrivs två sätt att verifiera att grundläggande HTTP-autentisering fungerar:
- Använd ett
curl
-kommando för att verifiera att du måste ange ett användarnamn och lösenord för att få klusterstatus - Konfigurera grundläggande HTTP-autentisering i administratören
Använd ett curl
-kommando för att verifiera klusterstatus
Ange följande kommando:
curl -i http://<hostname, ip, or localhost>:<proxy port>/_cluster/health
Om du till exempel anger kommandot på sökmotorservern och proxyn använder port 8080:
curl -i http://localhost:8080/_cluster/health
Följande meddelande visas för att ange att autentiseringen misslyckades:
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>
Prova följande kommando:
curl -i -u <username>:<password> http://<hostname, ip, or localhost>:<proxy port>/_cluster/health
Exempel:
curl -i -u magento_elasticsearch:mypassword http://localhost:8080/_cluster/health
Den här gången lyckas kommandot med ett meddelande som liknar följande:
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}
Konfigurera grundläggande HTTP-autentisering i administratören
Utför samma uppgifter som beskrivs i Sökmotorkonfigurationen förutom att klicka Yes i listan Enable HTTP Auth och ange ditt användarnamn och lösenord i de angivna fälten.
Klicka på Test Connection för att kontrollera att den fungerar och klicka sedan på Save Config.
Du måste tömma cachen och indexera om innan du fortsätter.