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.)
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 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.
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.
-
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; } }
-
Reiniciar nginx:
code language-bash service nginx restart
-
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:
-
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:
-
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. -
(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>
-
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.
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;
}
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.
-
Introduzca el siguiente comando para crear un directorio donde almacenar la configuración de autenticación:
code language-bash mkdir /etc/nginx/auth/
-
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; }
-
Si configuró un proxy seguro, elimine
/etc/nginx/conf.d/magento_es_auth.conf
. -
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.