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.)
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 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.
Configurar um proxy para o Apache 2.4
Esta seção discute como configurar um proxy usando um host virtual.
-
Habilite
mod_proxy
da seguinte maneira:code language-bash a2enmod proxy_http
-
Usar um editor de texto para abrir
/etc/apache2/sites-available/000-default.conf
-
Adicione a seguinte diretiva na parte superior do arquivo:
code language-conf Listen 8080
-
Adicione o seguinte na parte inferior do arquivo:
code language-conf <VirtualHost *:8080> ProxyPass "/" "http://localhost:9200/" ProxyPassReverse "/" "http://localhost:9200/" </VirtualHost>
-
Reiniciar o Apache:
code language-bash service apache2 restart
-
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:
-
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:
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.
-
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>
- Apache 2.4: editar
-
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. -
Salve as alterações, saia do editor de texto e reinicie o Apache:
- CentOS:
service httpd restart
- Ubuntu:
service apache2 restart
- CentOS:
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.