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.)
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:
-
Apache
-
Nginx
Configuración de un proxy
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.
Configuración de un proxy para Apache 2.4
En esta sección se explica cómo configurar un proxy mediante un host virtual.
-
Habilite
mod_proxy
de la siguiente manera:code language-bash a2enmod proxy_http
-
Usar un editor de texto para abrir
/etc/apache2/sites-available/000-default.conf
-
Agregue la siguiente directiva en la parte superior del archivo:
code language-conf Listen 8080
-
Agregue lo siguiente en la parte inferior del archivo:
code language-conf <VirtualHost *:8080> ProxyPass "/" "http://localhost:9200/" ProxyPassReverse "/" "http://localhost:9200/" </VirtualHost>
-
Reinicie Apache:
code language-bash service apache2 restart
-
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:
-
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. -
Si es necesario, instale
htpasswd
:- Ubuntu:
apt-get -y install apache2-utils
- CentOS:
yum -y install httpd-tools
- Ubuntu:
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.
-
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>
- Apache 2.4: Editar
-
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. -
Guarde los cambios, salga del editor de texto y reinicie Apache:
- CentOS:
service httpd restart
- Ubuntu:
service apache2 restart
- CentOS:
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.