Configurare Apache per il motore di ricerca

In questo argomento viene illustrato un esempio di protezione della comunicazione tra il server Web e il motore di ricerca (Elasticsearch o OpenSearch) tramite una combinazione di crittografia Transport Layer Security (TLS) e autenticazione HTTP di base. 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 utente con root privilegi.

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. Consulta Migra Elasticsearch a OpenSearch per ulteriori informazioni.

Questa sezione illustra come configurare Apache come non sicuro in modo che Adobe Commerce possa utilizzare un motore di ricerca in esecuzione su questo server. Questa sezione non tratta la configurazione dell’autenticazione HTTP Basic; questo argomento è trattato in Comunicazione sicura con Apache.

NOTE
Il motivo per cui il proxy non è protetto in questo esempio è che è più facile impostare e verificare. È possibile utilizzare TLS con questo proxy. Se lo desideri, assicurati di aggiungere le informazioni proxy alla configurazione host virtuale protetta.

Configurare un proxy per Apache 2.4

Questa sezione illustra come configurare un proxy utilizzando un host virtuale.

  1. Abilita mod_proxy come segue:

    code language-bash
    a2enmod proxy_http
    
  2. Utilizza un editor di testo per aprire /etc/apache2/sites-available/000-default.conf

  3. Aggiungi la seguente direttiva nella parte superiore del file:

    code language-conf
    Listen 8080
    
  4. Aggiungi quanto segue nella parte inferiore del file:

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

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

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

    Ad esempio, se utilizzi Elasticsearch e il tuo 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 Apache

Questa sezione illustra come proteggere la comunicazione tra Apache e il motore di ricerca utilizzando HTTP Basic autenticazione con Apache. Per ulteriori opzioni, consulta una delle risorse seguenti:

Vedere una delle sezioni seguenti:

Creare una password

Per motivi di sicurezza, è possibile individuare il file della password in qualsiasi punto, ad eccezione della directory principale dei documenti del server Web. In questo esempio viene illustrato come memorizzare il file della password in una nuova directory.

Se necessario, installare htpasswd

Innanzitutto, verifica di disporre di Apache htpasswd L'utilità viene installata come segue:

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

    code language-bash
    which htpasswd
    

    Se viene visualizzato un percorso, questo viene installato; se il comando non restituisce alcun output, htpasswd non è installato.

  2. Se necessario, installare htpasswd:

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

Creare un file di password

Immetti i seguenti comandi come utente con root privilegi:

mkdir -p /usr/local/apache/password
htpasswd -c /usr/local/apache/password/.<password file name> <username>

Dove

  • <username> può essere:

    • Configurazione di cron: l’utente del server web o un altro utente.

    In questo esempio, utilizziamo l’utente del server web, ma la scelta dell’utente dipende da te.

    • Elasticsearch di configurazione: l’utente è denominato magento_elasticsearch in questo esempio
  • <password file name> deve essere un file nascosto (inizia con .) e deve riflettere il nome dell'utente. Per ulteriori informazioni, consulta gli esempi più avanti in questa sezione.

Seguire le istruzioni visualizzate per creare una password per l'utente.

Esempi

Esempio 1: cron
Devi impostare l’autenticazione per un solo utente per cron; in questo esempio, utilizziamo l’utente del server web. Per creare un file di password per l'utente del server Web, immettere i seguenti comandi:

mkdir -p /usr/local/apache/password
htpasswd -c /usr/local/apache/password/.htpasswd apache

Esempio 2: Elasticsearch
Devi impostare l’autenticazione per due utenti: uno con accesso a nginx e uno con accesso a Elasticsearch. Per creare file di password per questi utenti, immetti i seguenti comandi:

mkdir -p /usr/local/apache/password
htpasswd -c /usr/local/apache/password/.htpasswd_elasticsearch magento_elasticsearch

Aggiungi altri utenti

Per aggiungere un altro utente al file della password, immettere il comando seguente come utente con root privilegi:

htpasswd /usr/local/apache/password/.htpasswd <username>

Comunicazione sicura con Apache

Questa sezione illustra come impostare Autenticazione HTTP Basic. 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.

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

  1. Utilizza un editor di testo per aggiungere i seguenti contenuti all’host virtuale protetto.

    • Apache 2.4: Modifica /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. Se hai aggiunto il precedente all’host virtuale protetto, rimuovi Listen 8080 e <VirtualHost *:8080> direttive aggiunte in precedenza all'host virtuale non protetto.

  3. Salva le modifiche, esci dall’editor di testo e riavvia Apache:

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

Verifica

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

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

Utilizza un curl comando 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 in Configurazione del motore di ricerca eccetto click Yes dal Enable HTTP Auth e inserisci il tuo nome utente e la tua password nei campi forniti.

Clic 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