Configurare Nginx per il motore di ricerca

In questo argomento viene illustrato un esempio di protezione delle comunicazioni tra il server Web e il motore di ricerca (Elasticsearch o OpenSearch) tramite una combinazione di crittografia TLS (Transport Layer Security) e autenticazione di base HTTP 1.Facoltativamente puoi anche configurare altri tipi di autenticazione; forniamo i riferimenti per tali informazioni.

Un termine precedente, Secure Sockets Layer (SSL), viene spesso utilizzato in modo intercambiabile con TLS. In questo argomento si fa riferimento a TLS.)

WARNING
Se non diversamente specificato, tutti i comandi di questo argomento devono essere immessi come utenti con privilegi root.

Recommendations

Consigliamo quanto segue:

  • Il server web utilizza TLS.

    TLS esula dall’ambito di questo argomento. Tuttavia, ti consigliamo vivamente di utilizzare un certificato reale in produzione e non un certificato autofirmato.

  • Il motore di ricerca viene eseguito sullo stesso host di un server Web. L’esecuzione del motore di ricerca e del server web su host diversi esula dall’ambito di questo argomento.

    Il vantaggio di mettere il motore di ricerca e il server web sullo stesso host è che rende impossibile intercettare le comunicazioni crittografate. Il server web del motore di ricerca non deve necessariamente essere lo stesso del server web Adobe Commerce; ad esempio, Adobe Commerce può eseguire Apache e Elasticsearch/OpenSearch può eseguire nginx.

    Se il motore di ricerca è esposto al web pubblico, devi configurare l’autenticazione. Se l’istanza del motore di ricerca è protetta all’interno della rete, ciò potrebbe non essere necessario. Rivolgiti al provider di hosting per determinare le misure di sicurezza da implementare per proteggere l’istanza.

Ulteriori informazioni su TLS

Consulta una delle risorse seguenti:

Configurare un proxy

NOTE
Il supporto di OpenSearch è stato aggiunto nella versione 2.4.4. OpenSearch è un fork di Elasticsearch compatibile. Per ulteriori informazioni, vedere Migrare l'Elasticsearch a OpenSearch.

In questa sezione viene illustrato come configurare nginx come proxy unsecure in modo che Adobe Commerce possa utilizzare un motore di ricerca in esecuzione su questo server. In questa sezione non viene illustrata la configurazione dell'autenticazione HTTP Basic, argomento trattato in Comunicazione sicura con nginx.

NOTE
Il motivo per cui il proxy non è protetto in questo esempio è che è più facile impostare e verificare. Puoi utilizzare TLS con questo proxy se lo desideri; a questo scopo, assicurati di aggiungere le informazioni proxy alla configurazione del blocco server protetto.

Specificare file di configurazione aggiuntivi nella configurazione globale

Verificare che il file /etc/nginx/nginx.conf globale contenga la riga seguente in modo da caricare gli altri file di configurazione descritti nelle sezioni seguenti:

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

Configurare nginx come proxy

Questa sezione illustra come specificare chi può accedere al server nginx.

  1. Utilizzare un editor di testo per creare un file /etc/nginx/conf.d/magento_es_auth.conf con il contenuto seguente:

    code language-conf
    server {
       listen 8080;
       location /_cluster/health {
          proxy_pass http://localhost:9200/_cluster/health;
       }
    }
    
  2. Inginx di riavvio:

    code language-bash
    service nginx restart
    
  3. Verificare il funzionamento del proxy immettendo il comando seguente:

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

    Ad esempio, se il proxy utilizza la porta 8080:

    code language-bash
    curl -i http://localhost:8080/_cluster/health
    

    Messaggi simili alla seguente visualizzazione per indicare il successo:

    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}
    

Comunicazione sicura con nginx

In questa sezione viene illustrato come configurare l'autenticazione di base HTTP HTTP con il proxy protetto. L’utilizzo congiunto dell’autenticazione TLS e HTTP Basic impedisce a chiunque di intercettare le comunicazioni con Elasticsearch, OpenSearch o con il server dell’applicazione.

Poiché nginx supporta in modo nativo l'autenticazione HTTP Basic, è consigliabile sostituirla, ad esempio, con Autenticazione digest, che non è consigliata in produzione.

Risorse aggiuntive:

Per ulteriori informazioni, consulta le sezioni seguenti:

Creare una password

È consigliabile utilizzare il comando Apache htpasswd per codificare le password per un utente con accesso a Elasticsearch o OpenSearch (denominato magento_elasticsearch in questo ).

Per creare una password:

  1. Immettere il comando seguente per determinare se htpasswd è già installato:

    code language-bash
    which htpasswd
    

    Se viene visualizzato un percorso, questo verrà installato. Se il comando non restituisce alcun output, htpasswd non verrà installato.

  2. Se necessario, installare htpasswd:

    • Ubuntu: apt-get -y install apache2-utils
    • CentOS: yum -y install httpd-tools
  3. Creare una directory /etc/nginx/passwd per archiviare le password:

    code language-bash
    mkdir -p /etc/nginx/passwd
    
    code language-bash
    htpasswd -c /etc/nginx/passwd/.<filename> <username>
    
    note warning
    WARNING
    Per motivi di sicurezza, <filename> deve essere nascosto, ovvero deve iniziare con un punto.
  4. (facoltativo). Per aggiungere un altro utente al file della password, immettere lo stesso comando senza l'opzione -c (crea):

    code language-bash
    htpasswd /etc/nginx/passwd/.<filename> <username>
    
  5. Verificare che il contenuto di /etc/nginx/passwd sia corretto.

Configurare l’accesso a nginx

Questa sezione illustra come specificare chi può accedere al server nginx.

WARNING
L'esempio mostrato è per un proxy unsecure. Per utilizzare un proxy protetto, aggiungere i seguenti contenuti (ad eccezione della porta di ascolto) al blocco del server protetto.

Utilizza un editor di testo per modificare /etc/nginx/conf.d/magento_es_auth.conf (non protetto) o il blocco del server protetto con i seguenti contenuti:

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
La porta di ascolto del motore di ricerca mostrata nell'esempio precedente è solo un esempio. Per motivi di sicurezza, è consigliabile utilizzare una porta di ascolto non predefinita.

Impostare un contesto limitato per il motore di ricerca

Questa sezione illustra come specificare chi può accedere al server del motore di ricerca.

  1. Immetti il seguente comando per creare una directory in cui memorizzare la configurazione di autenticazione:

    code language-bash
    mkdir /etc/nginx/auth/
    
  2. Utilizzare un editor di testo per creare un file /etc/nginx/auth/magento_elasticsearch.conf con il contenuto seguente:

    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. Se si imposta un proxy protetto, eliminare /etc/nginx/conf.d/magento_es_auth.conf.

  4. Riavvia nginx e continua con la sezione successiva:

    code language-bash
    service nginx restart
    

Verifica

In questa sezione vengono descritti due modi per verificare il funzionamento dell'autenticazione HTTP Basic:

  • Utilizzo di un comando curl per verificare che sia necessario immettere un nome utente e una password per ottenere lo stato del cluster
  • Configurazione dell’autenticazione HTTP Basic in Admin

Utilizza un comando curl per verificare lo stato del cluster

Immetti il comando seguente:

curl -i http://<hostname, ip, or localhost>:<proxy port>/_cluster/health

Ad esempio, se immetti il comando sul server del motore di ricerca e il proxy utilizza la porta 8080:

curl -i http://localhost:8080/_cluster/health

Viene visualizzato il seguente messaggio per indicare che l’autenticazione non è riuscita:

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>

Ora prova il seguente comando:

curl -i -u <username>:<password> http://<hostname, ip, or localhost>:<proxy port>/_cluster/health

Ad esempio:

curl -i -u magento_elasticsearch:mypassword http://localhost:8080/_cluster/health

Questa volta il comando ha esito positivo e viene visualizzato un messaggio simile al seguente:

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}

Configurare l’autenticazione HTTP Basic in Admin

Eseguire le stesse attività descritte nella configurazione del motore di ricerca eccetto fare clic su Yes dall'elenco Enable HTTP Auth e immettere il nome utente e la password nei campi specificati.

Fare clic su Test Connection per verificare che funzioni, quindi fare clic su Save Config.

Prima di continuare, è necessario svuotare la cache e reindicizzare.

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