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 (Transport Layer Security) 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. Se Migrera Elasticsearch till OpenSearch för mer information.

I det här avsnittet beskrivs hur du konfigurerar Apache som osäker 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 hur du konfigurerar HTTP Basic-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. Använda en textredigerare för att öppna /etc/apache2/sites-available/000-default.conf

  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-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}
    

Säker kommunikation med Apache

I det här avsnittet beskrivs hur du skyddar kommunikationen mellan Apache och sökmotorn med 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 utility installeras enligt följande:

  1. Ange följande kommando för att avgöra om htpasswd är redan installerat:

    code language-bash
    which htpasswd
    

    Om en sökväg visas installeras den. Om kommandot inte returnerar några utdata visas htpasswd är inte installerat.

  2. Installera vid behov htpasswd:

    • 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 root behörighet:

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 ett namn magento_elasticsearch i detta exempel
  • <password file name> måste vara en dold fil (börjar med .) och bör å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 <VirtualHost *:8080> Direktiv som du lade till tidigare i 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ända curl 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 en 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ökmotorkonfiguration utom klicka Yes från Enable HTTP Auth och ange ditt användarnamn och lösenord i fälten.

Klicka Test Connection för att vara säker på att det 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