Konfigurera Nginx 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 nginx 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 nginx.

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

Ange ytterligare konfigurationsfiler i den globala konfigurationen

Kontrollera att din globala /etc/nginx/nginx.conf innehåller följande rad så att den läser in de andra konfigurationsfilerna som beskrivs i följande avsnitt:

include /etc/nginx/conf.d/*.conf;

Konfigurera nginx som proxy

I det här avsnittet beskrivs hur du anger vilka som ska få åtkomst till Nginx-servern.

  1. Använd en textredigerare för att skapa filen /etc/nginx/conf.d/magento_es_auth.conf med följande innehåll:

    code language-conf
    server {
       listen 8080;
       location /_cluster/health {
          proxy_pass http://localhost:9200/_cluster/health;
       }
    }
    
  2. Starta om nginx:

    code language-bash
    service nginx restart
    
  3. Kontrollera att proxyn fungerar genom att ange följande kommando:

    code language-bash
    curl -i http://localhost:<proxy port>/_cluster/health
    

    Om din proxy till exempel 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 nginx

I det här avsnittet beskrivs hur du konfigurerar grundläggande HTTP-autentisering med din säkra proxy. Användning av TLS och HTTP Basic-autentisering tillsammans förhindrar alla från att kommunicera med Elasticsearch eller OpenSearch eller med programservern.

Eftersom ursprungligt stöd för grundläggande HTTP-autentisering rekommenderas det, till exempel Sammanfattad autentisering, som inte rekommenderas i produktionen.

Ytterligare resurser:

Mer information finns i följande avsnitt:

Skapa ett lösenord

Vi rekommenderar att du använder Apache htpasswd-kommandot för att koda lösenord för en användare som har åtkomst till Elasticsearch eller OpenSearch (som heter magento_elasticsearch i det här exemplet).

Skapa ett lösenord:

  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
  3. Skapa en /etc/nginx/passwd-katalog för att lagra lösenord:

    code language-bash
    mkdir -p /etc/nginx/passwd
    
    code language-bash
    htpasswd -c /etc/nginx/passwd/.<filename> <username>
    
    note warning
    WARNING
    Av säkerhetsskäl bör <filename> döljas, dvs. den måste börja med en punkt.
  4. (valfritt). Om du vill lägga till en annan användare i lösenordsfilen anger du samma kommando utan alternativet -c (skapa):

    code language-bash
    htpasswd /etc/nginx/passwd/.<filename> <username>
    
  5. Kontrollera att innehållet i /etc/nginx/passwd är korrekt.

Konfigurera åtkomst till nginx

I det här avsnittet beskrivs hur du anger vilka som ska få åtkomst till Nginx-servern.

WARNING
Exemplet som visas är för en osäker-proxy. Om du vill använda en säker proxy lägger du till följande innehåll (förutom lyssningsporten) i det säkra serverblocket.

Använd en textredigerare för att ändra antingen /etc/nginx/conf.d/magento_es_auth.conf (osäkert) eller ditt säkra serverblock med följande innehåll:

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;
}
NOTE
Sökmotorns avlyssningsport som visas i föregående exempel är endast exempel. Av säkerhetsskäl rekommenderar vi att du använder en lyssningsport som inte är standard.

Konfigurera en begränsad kontext för sökmotorn

I det här avsnittet beskrivs hur du anger vilka som får åtkomst till sökmotorservern.

  1. Ange följande kommando för att skapa en katalog där autentiseringskonfigurationen ska lagras:

    code language-bash
    mkdir /etc/nginx/auth/
    
  2. Använd en textredigerare för att skapa filen /etc/nginx/auth/magento_elasticsearch.conf med följande innehåll:

    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;
    }
    
  3. Om du har konfigurerat en säker proxy tar du bort /etc/nginx/conf.d/magento_es_auth.conf.

  4. Starta om nästa och fortsätt med nästa avsnitt:

    code language-bash
    service nginx 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