Configuración de Apache para el 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 Apache 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; tal y como se describe en Comunicación segura con Apache.

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 desea hacerlo, asegúrese de añadir la información del proxy a la configuración de su host virtual seguro.

Configuración de un proxy para Apache 2.4

En esta sección se explica cómo configurar un proxy mediante un host virtual.

  1. Habilite mod_proxy de la siguiente manera:

    code language-bash
    a2enmod proxy_http
    
  2. Usar un editor de texto para abrir /etc/apache2/sites-available/000-default.conf

  3. Agregue la siguiente directiva en la parte superior del archivo:

    code language-conf
    Listen 8080
    
  4. Agregue lo siguiente en la parte inferior del archivo:

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

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

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

    Por ejemplo, si utiliza Elasticsearch y 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 Apache

En esta sección se explica cómo proteger la comunicación entre Apache y el motor de búsqueda mediante la autenticación HTTP Basic con Apache. Para obtener más opciones, consulte uno de los siguientes recursos:

Consulte una de las siguientes secciones:

Crear una contraseña

Por motivos de seguridad, puede localizar el archivo de contraseña en cualquier lugar excepto en el servidor web docroot. En este ejemplo, se muestra cómo almacenar el archivo de contraseña en un nuevo directorio.

Instale htpasswd si es necesario

Primero, compruebe si tiene la utilidad Apache htpasswd instalada de la siguiente manera:

  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

Crear un archivo de contraseña

Escriba los siguientes comandos como usuario con privilegios de root:

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

Donde

  • <username> puede ser:

    • Configuración de cron: el usuario del servidor web u otro usuario.

    En este ejemplo, utilizamos el usuario del servidor web, pero la elección del usuario depende de usted.

    • Configurando el Elasticsearch: el nombre del usuario es magento_elasticsearch en este ejemplo
  • <password file name> debe ser un archivo oculto (comienza con .) y debe reflejar el nombre del usuario. Consulte los ejemplos que aparecen más adelante en esta sección para obtener más información.

Siga las indicaciones de la pantalla para crear una contraseña de usuario.

Ejemplos

Ejemplo 1: cron
Debe configurar la autenticación solo para un usuario para cron; en este ejemplo, utilizamos el usuario del servidor web. Para crear un archivo de contraseña para el usuario del servidor web, introduzca los siguientes comandos:

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

Ejemplo 2: Elasticsearch
Debe configurar la autenticación para dos usuarios: uno con acceso a nginx y otro con acceso a Elasticsearch. Para crear archivos de contraseña para estos usuarios, introduzca los siguientes comandos:

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

Añadir usuarios adicionales

Para agregar otro usuario al archivo de contraseñas, escriba el siguiente comando como usuario con privilegios de root:

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

Comunicación segura con Apache

En esta sección se explica cómo configurar la autenticación HTTP Basic. 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.

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

  1. Utilice un editor de texto para añadir el siguiente contenido a su host virtual seguro.

    • Apache 2.4: Editar /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. Si agregó lo anterior a su host virtual seguro, quite Listen 8080 y las directivas de <VirtualHost *:8080> que agregó anteriormente al host virtual no seguro.

  3. Guarde los cambios, salga del editor de texto y reinicie Apache:

    • CentOS: service httpd restart
    • Ubuntu: service apache2 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