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.)

WARNING
Om inget annat anges måste alla kommandon i det här avsnittet anges som en användare med 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:

Konfigurera en proxy

NOTE
Stöd för OpenSearch lades till i 2.4.4. OpenSearch är en kompatibel gaffel för Elasticsearch. Mer information finns i Migrera Elasticsearch till OpenSearch.

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.

NOTE
Orsaken till att proxyn inte skyddas i det här exemplet är att det är enklare att konfigurera och verifiera. Du kan använda TLS med den här proxyn. Om du vill göra det måste du lägga till proxyinformationen i den säkra virtuella värdkonfigurationen.

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.

  1. Aktivera mod_proxy enligt följande:

    code language-bash
    a2enmod proxy_http
    
  2. Öppna /etc/apache2/sites-available/000-default.conf med en textredigerare

  3. Lägg till följande direktiv högst upp i filen:

    code language-conf
    Listen 8080
    
  4. Lägg till följande längst ned i filen:

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

    code language-bash
    service apache2 restart
    
  6. 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:

  1. 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.

  2. Installera htpasswd om det behövs:

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

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.

  1. 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>
    
  2. 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.

  3. Spara ändringarna, avsluta textredigeraren och starta om Apache:

    • CentOS: service httpd restart
    • Ubuntu: service apache2 restart

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.

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