Configurar o Apache 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 Apache 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 o Apache.

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 fazer isso, certifique-se de adicionar as informações do proxy à configuração do host virtual seguro.

Configurar um proxy para o Apache 2.4

Esta seção discute como configurar um proxy usando um host virtual.

  1. Habilite mod_proxy da seguinte maneira:

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

  3. Adicione a seguinte diretiva na parte superior do arquivo:

    code language-conf
    Listen 8080
    
  4. Adicione o seguinte na parte inferior do arquivo:

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

    code language-bash
    service apache2 restart
    
  6. Verifique se o proxy funciona digitando o seguinte comando:

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

    Por exemplo, se você estiver usando Elasticsearch e 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 o Apache

Esta seção discute como proteger a comunicação entre o Apache e o mecanismo de pesquisa usando a autenticação HTTP Básica com o Apache. Para obter mais opções, consulte um dos seguintes recursos:

Consulte uma das seguintes seções:

Criar uma senha

Por motivos de segurança, você pode localizar o arquivo de senha em qualquer lugar, exceto no docroot do servidor Web. Neste exemplo, mostramos como armazenar o arquivo de senha em um novo diretório.

Instale o htpasswd, se necessário

Primeiro, veja se o utilitário Apache htpasswd está instalado da seguinte maneira:

  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

Criar um arquivo de senha

Digite os seguintes comandos como um usuário com privilégios de root:

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

Onde

  • <username> pode ser:

    • Configuração do cron: o usuário do servidor Web ou outro usuário.

    Neste exemplo, usamos o usuário do servidor Web, mas a escolha do usuário depende de você.

    • Configurando o Elasticsearch: o usuário é nomeado como magento_elasticsearch neste exemplo
  • <password file name> deve ser um arquivo oculto (começa com .) e deve refletir o nome do usuário. Consulte os exemplos posteriormente nesta seção para obter detalhes.

Siga as instruções na tela para criar uma senha para o usuário.

Exemplos

Exemplo 1: cron
Você deve configurar a autenticação para apenas um usuário para cron; neste exemplo, usamos o usuário do servidor Web. Para criar um arquivo de senha para o usuário do servidor Web, digite os seguintes comandos:

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

Exemplo 2: Elasticsearch
Você deve configurar a autenticação para dois usuários: um com acesso ao nginx e outro com acesso ao Elasticsearch. Para criar arquivos de senha para esses usuários, digite os seguintes comandos:

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

Adicionar mais usuários

Para adicionar outro usuário ao seu arquivo de senhas, digite o seguinte comando como um usuário com privilégios root:

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

Comunicação segura com o Apache

Esta seção discute como configurar a autenticação básica de HTTP. 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.

Esta seção discute como especificar quem pode acessar o servidor Apache.

  1. Use um editor de texto para adicionar o seguinte conteúdo ao 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. Se você tiver adicionado o anterior ao host virtual seguro, remova Listen 8080 e as diretivas <VirtualHost *:8080> adicionadas anteriormente ao host virtual não seguro.

  3. Salve as alterações, saia do editor de texto e reinicie o Apache:

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