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.)

WARNING
A menos que seja observado o contrário, todos os comandos neste tópico devem ser inseridos como um usuário com privilégios 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:

Configurar um proxy

NOTE
O suporte ao OpenSearch foi adicionado na versão 2.4.4. O OpenSearch é uma bifurcação de Elasticsearch compatível. Consulte Migrar Elasticsearch para OpenSearch para obter mais informações.

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.

NOTE
O motivo pelo qual o proxy não é seguro neste exemplo é que é mais fácil de configurar e verificar. Você pode usar o TLS com esse proxy se desejar; para isso, adicione as informações do proxy à configuração de bloqueio do servidor seguro.

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.

  1. 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;
       }
    }
    
  2. Reiniciar o nginx:

    code language-bash
    service nginx restart
    
  3. 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:

  1. 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.

  2. Se necessário, instale o htpasswd:

    • Ubuntu: apt-get -y install apache2-utils
    • CentOS: yum -y install httpd-tools
  3. 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.
  4. (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>
    
  5. 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.

WARNING
O exemplo mostrado é para um proxy não seguro. Para usar um proxy seguro, adicione o seguinte conteúdo (exceto a porta de escuta) ao bloco do servidor seguro.

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;
}
NOTE
A porta de escuta do mecanismo de pesquisa mostrada no exemplo anterior é apenas para exemplos. Por motivos de segurança, recomendamos que você use uma porta de escuta não padrão.

Configurar um contexto restrito para o mecanismo de pesquisa

Esta seção discute como especificar quem pode acessar o servidor do mecanismo de pesquisa.

  1. Digite o seguinte comando para criar um diretório para armazenar a configuração de autenticação:

    code language-bash
    mkdir /etc/nginx/auth/
    
  2. 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;
    }
    
  3. Se você configurar um proxy seguro, exclua /etc/nginx/conf.d/magento_es_auth.conf.

  4. 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.

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