Configure Nginx para su motor de búsqueda

En este tema se describe un ejemplo de cómo proteger la comunicación entre el servidor web y el motor de búsqueda (Elasticsearch u OpenSearch) mediante una combinación de cifrado de Seguridad de la capa de transporte (TLS) y autenticación básica HTTP. Si lo desea, también puede configurar otros tipos de autenticación. Proporcionamos referencias para esa información.

(Un término más antiguo, Capa de sockets seguros (SSL), se utiliza con frecuencia indistintamente con TLS. En este tema, nos referimos a TLS.)

WARNING
A menos que se indique lo contrario, todos los comandos de este tema deben escribirse como un usuario con privilegios de root.

Recommendations

Recomendamos lo siguiente:

  • El servidor web utiliza TLS.

    TLS está fuera del ámbito de este tema; sin embargo, le recomendamos encarecidamente que utilice un certificado real en producción y no un certificado autofirmado.

  • El motor de búsqueda se ejecuta en el mismo host que un servidor web. La ejecución del motor de búsqueda y del servidor web en hosts diferentes está fuera del ámbito de este tema.

    La ventaja de colocar el motor de búsqueda y el servidor web en el mismo host es que hace imposible interceptar la comunicación cifrada. El servidor web del motor de búsqueda no tiene por qué ser el mismo que el servidor web de Adobe Commerce; por ejemplo, Adobe Commerce puede ejecutar Apache y Elasticsearch/OpenSearch puede ejecutar nginx.

    Si el motor de búsqueda está expuesto a la web pública, debe configurar la autenticación. Si la instancia del motor de búsqueda está protegida dentro de la red, es posible que no sea necesario. Póngase en contacto con su proveedor de alojamiento para determinar qué medidas de seguridad debe implementar para proteger su instancia.

Más información sobre TLS

Consulte uno de los siguientes recursos:

Configuración de un proxy

NOTE
Se ha añadido compatibilidad con OpenSearch en 2.4.4. OpenSearch es una ramificación compatible de Elasticsearch. Consulte Migrar Elasticsearch a OpenSearch para obtener más información.

En esta sección se explica cómo configurar nginx como un proxy no seguro para que Adobe Commerce pueda utilizar un motor de búsqueda que se ejecute en este servidor. En esta sección no se describe la configuración de la autenticación HTTP Basic; se trata en Comunicación segura con nginx.

NOTE
La razón por la que el proxy no está protegido en este ejemplo es que es más fácil de configurar y verificar. Puede utilizar TLS con este proxy si lo desea; para ello, asegúrese de añadir la información del proxy a la configuración del bloque de servidor seguro.

Especificar archivos de configuración adicionales en la configuración global

Asegúrese de que su /etc/nginx/nginx.conf global contenga la línea siguiente para que cargue los demás archivos de configuración mencionados en las secciones siguientes:

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

Configuración de nginx como proxy

En esta sección se explica cómo especificar quién puede acceder al servidor de nginx.

  1. Use un editor de texto para crear un archivo /etc/nginx/conf.d/magento_es_auth.conf con el siguiente contenido:

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

    code language-bash
    service nginx restart
    
  3. Compruebe que el proxy funciona introduciendo el siguiente comando:

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

    Por ejemplo, si el proxy utiliza el puerto 8080:

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

    Se muestran mensajes similares a los siguientes para indicar que se ha realizado correctamente:

    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}
    

Comunicación segura con nginx

En esta sección se explica cómo configurar la autenticación HTTP Basic con su proxy seguro. El uso conjunto de autenticación TLS y HTTP Basic evita que cualquier persona intercepte la comunicación con Elasticsearch o OpenSearch, o con su servidor de aplicaciones.

Dado que nginx admite de forma nativa la autenticación HTTP Basic, se recomienda usar la autenticación HTTP Basic en lugar de, por ejemplo, Autenticación implícita, que no se recomienda en producción.

Recursos adicionales:

Consulte las secciones siguientes para obtener más información:

Crear una contraseña

Le recomendamos que utilice el comando Apache htpasswd para codificar contraseñas de un usuario con acceso a Elasticsearch o OpenSearch (denominado magento_elasticsearch en este ejemplo).

Para crear una contraseña:

  1. Escriba el siguiente comando para determinar si htpasswd ya está instalado:

    code language-bash
    which htpasswd
    

    Si se muestra una ruta de acceso, se instala; si el comando no devuelve ningún resultado, htpasswd no está instalado.

  2. Si es necesario, instale htpasswd:

    • Ubuntu: apt-get -y install apache2-utils
    • CentOS: yum -y install httpd-tools
  3. Cree un directorio /etc/nginx/passwd para almacenar contraseñas:

    code language-bash
    mkdir -p /etc/nginx/passwd
    
    code language-bash
    htpasswd -c /etc/nginx/passwd/.<filename> <username>
    
    note warning
    WARNING
    Por motivos de seguridad, <filename> debe estar oculto; es decir, debe comenzar con un punto.
  4. (Opcional). Para agregar otro usuario al archivo de contraseñas, escriba el mismo comando sin la opción -c (crear):

    code language-bash
    htpasswd /etc/nginx/passwd/.<filename> <username>
    
  5. Compruebe que el contenido de /etc/nginx/passwd sea correcto.

Configuración del acceso a nginx

En esta sección se explica cómo especificar quién puede acceder al servidor de nginx.

WARNING
El ejemplo mostrado es para un proxy unsecure. Para utilizar un proxy seguro, agregue el siguiente contenido (excepto el puerto de escucha) al bloque de servidor seguro.

Use un editor de texto para modificar /etc/nginx/conf.d/magento_es_auth.conf (no seguro) o el bloque de servidor seguro con el siguiente contenido:

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
El puerto de escucha del motor de búsqueda que se muestra en el ejemplo anterior solo son ejemplos. Por motivos de seguridad, le recomendamos que utilice un puerto de escucha no predeterminado.

Configuración de un contexto restringido para el motor de búsqueda

En esta sección se explica cómo especificar quién puede acceder al servidor del motor de búsqueda.

  1. Introduzca el siguiente comando para crear un directorio donde almacenar la configuración de autenticación:

    code language-bash
    mkdir /etc/nginx/auth/
    
  2. Use un editor de texto para crear un archivo /etc/nginx/auth/magento_elasticsearch.conf con el siguiente contenido:

    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. Si configuró un proxy seguro, elimine /etc/nginx/conf.d/magento_es_auth.conf.

  4. Reinicie nginx y continúe con la siguiente sección:

    code language-bash
    service nginx restart
    

Verificar

En esta sección se describen dos formas de comprobar que la autenticación HTTP Basic funciona:

  • Utilizando un comando curl para comprobar, debe escribir un nombre de usuario y una contraseña para obtener el estado del clúster
  • Configuración de la autenticación HTTP Basic en el administrador

Usar un comando curl para comprobar el estado del clúster

Introduzca el siguiente comando:

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

Por ejemplo, si introduce el comando en el servidor del motor de búsqueda y el proxy utiliza el puerto 8080:

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

Se muestra el siguiente mensaje para indicar que la autenticación ha fallado:

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>

Ahora intente el siguiente comando:

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

Por ejemplo:

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

Esta vez, el comando se ejecuta correctamente con un mensaje similar al siguiente:

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}

Configure la autenticación HTTP Basic en el administrador

Realice las mismas tareas que se describen en Configuración del motor de búsqueda excepto, haga clic en Yes en la lista Enable HTTP Auth e introduzca su nombre de usuario y contraseña en los campos proporcionados.

Haga clic en Test Connection para asegurarse de que funciona y luego haga clic en Save Config.

Debe vaciar la caché y reindexar antes de continuar.

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