Configurar o Nginx para seu mecanismo de pesquisa
Este tópico discute um exemplo de proteção da comunicação entre o servidor Web e o mecanismo de pesquisa (Elasticsearch ou OpenSearch) usando uma combinação de criptografia TLS (Transport Layer Security) e autenticação básica HTTP. Opcionalmente, também é possível configurar outros tipos de autenticação; fornecemos referências para essas informações.
(Um termo mais antigo, SSL (Secure Sockets Layer), é frequentemente usado alternadamente com TLS. Neste tópico, nos referimos ao TLS.)
root
.Recommendations
Recomendamos o seguinte:
-
Seu servidor da Web usa TLS.
O TLS está fora do escopo desse tópico; no entanto, recomendamos que você use um certificado real na produção e não um certificado autoassinado.
-
Seu mecanismo de pesquisa é executado no mesmo host que um servidor da Web. A execução do mecanismo de pesquisa e do servidor Web em hosts diferentes está além do escopo deste tópico.
A vantagem de colocar o mecanismo de busca e o servidor Web no mesmo host é que isso torna impossível a interceptação de comunicações criptografadas. O servidor Web do mecanismo de pesquisa não precisa ser o mesmo que o servidor Web do Adobe Commerce; por exemplo, o Adobe Commerce pode executar o Apache e o Elasticsearch/OpenSearch pode executar o nginx.
Se o mecanismo de pesquisa for exposto à Web pública, você deverá configurar a autenticação. Se a instância do mecanismo de pesquisa estiver protegida na rede, isso pode não ser necessário. Trabalhe com seu provedor de hospedagem para determinar quais medidas de segurança você deve implementar para proteger sua instância.
Mais informações sobre TLS
Consulte um dos seguintes recursos:
-
Apache
-
Nginx
Configurar um proxy
Esta seção discute como configurar o nginx como um proxy não seguro para que o Adobe Commerce possa usar um mecanismo de pesquisa em execução neste servidor. Esta seção não discute a configuração da autenticação básica de HTTP; ela é discutida em Comunicação segura com nginx.
Especifique arquivos de configuração adicionais na sua configuração global
Verifique se o /etc/nginx/nginx.conf
global contém a seguinte linha para que ele carregue os outros arquivos de configuração discutidos nas seguintes seções:
include /etc/nginx/conf.d/*.conf;
Configurar o nginx como proxy
Esta seção discute como especificar quem pode acessar o servidor nginx.
-
Use um editor de texto para criar um arquivo
/etc/nginx/conf.d/magento_es_auth.conf
com o seguinte conteúdo:code language-conf server { listen 8080; location /_cluster/health { proxy_pass http://localhost:9200/_cluster/health; } }
-
Reiniciar o nginx:
code language-bash service nginx restart
-
Verifique se o proxy funciona digitando o seguinte comando:
code language-bash curl -i http://localhost:<proxy port>/_cluster/health
Por exemplo, se seu proxy usar a porta 8080:
code language-bash curl -i http://localhost:8080/_cluster/health
Mensagens semelhantes ao seguinte são exibidas para indicar sucesso:
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}
Comunicação segura com nginx
Esta seção discute como configurar a Autenticação básica de HTTP com seu proxy seguro. O uso conjunto da autenticação TLS e HTTP Básica impede que qualquer pessoa intercepte a comunicação com o Elasticsearch ou OpenSearch ou com o servidor de aplicativos.
Como o nginx nativamente oferece suporte à autenticação básica HTTP, recomendamos fazê-lo por exemplo, Autenticação Digest, que não é recomendada na produção.
Recursos adicionais:
Consulte as seguintes seções para obter mais informações:
Criar uma senha
Recomendamos que você use o comando Apache htpasswd
para codificar senhas para um usuário com acesso ao Elasticsearch ou OpenSearch (nomeado como magento_elasticsearch
neste exemplo).
Para criar uma senha:
-
Digite o seguinte comando para determinar se
htpasswd
já está instalado:code language-bash which htpasswd
Se um caminho for exibido, ele será instalado; se o comando não retornar nenhuma saída,
htpasswd
não será instalado. -
Se necessário, instale o
htpasswd
:- Ubuntu:
apt-get -y install apache2-utils
- CentOS:
yum -y install httpd-tools
- Ubuntu:
-
Crie um diretório
/etc/nginx/passwd
para armazenar senhas:code language-bash mkdir -p /etc/nginx/passwd
code language-bash htpasswd -c /etc/nginx/passwd/.<filename> <username>
note warning WARNING Por motivos de segurança, <filename>
deve estar oculto; ou seja, deve começar com um ponto. -
(Opcional). Para adicionar outro usuário ao seu arquivo de senhas, digite o mesmo comando sem a opção
-c
(criar):code language-bash htpasswd /etc/nginx/passwd/.<filename> <username>
-
Verifique se o conteúdo de
/etc/nginx/passwd
está correto.
Configurar acesso ao nginx
Esta seção discute como especificar quem pode acessar o servidor nginx.
Use um editor de texto para modificar o /etc/nginx/conf.d/magento_es_auth.conf
(não seguro) ou o bloco de servidor seguro com o seguinte conteúdo:
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;
}
Configurar um contexto restrito para o mecanismo de pesquisa
Esta seção discute como especificar quem pode acessar o servidor do mecanismo de pesquisa.
-
Digite o seguinte comando para criar um diretório para armazenar a configuração de autenticação:
code language-bash mkdir /etc/nginx/auth/
-
Use um editor de texto para criar um arquivo
/etc/nginx/auth/magento_elasticsearch.conf
com o seguinte conteúdo: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; }
-
Se você configurar um proxy seguro, exclua
/etc/nginx/conf.d/magento_es_auth.conf
. -
Reinicie o nginx e continue com a próxima seção:
code language-bash service nginx restart
Verificar
Esta seção discute duas maneiras de verificar se a autenticação básica de HTTP está funcionando:
- Usando um comando
curl
para verificar, você deve inserir um nome de usuário e uma senha para obter o status do cluster - Configuração da autenticação básica de HTTP no Admin
Use um comando curl
para verificar o status do cluster
Digite o seguinte comando:
curl -i http://<hostname, ip, or localhost>:<proxy port>/_cluster/health
Por exemplo, se você digitar o comando no servidor do mecanismo de pesquisa e seu proxy usar a porta 8080:
curl -i http://localhost:8080/_cluster/health
A seguinte mensagem é exibida para indicar falha na autenticação:
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>
Agora, tente o seguinte comando:
curl -i -u <username>:<password> http://<hostname, ip, or localhost>:<proxy port>/_cluster/health
Por exemplo:
curl -i -u magento_elasticsearch:mypassword http://localhost:8080/_cluster/health
Desta vez, o comando é bem-sucedido com uma mensagem semelhante à seguinte:
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}
Configurar a autenticação básica de HTTP no Admin
Execute as mesmas tarefas conforme discutido em Configuração do mecanismo de pesquisa exceto clique em Yes na lista Enable HTTP Auth e insira seu nome de usuário e senha nos campos fornecidos.
Clique em Test Connection para verificar se funciona e clique em Save Config.
Você deve liberar o cache e reindexar antes de continuar.