Como configurar o proxy do servidor da web do Apache em frente ao Apache Tomcat no Red Hat Linux

Como configurar o proxy do servidor da web do Apache em frente ao Apache Tomcat no Red Hat Linux

Objetivo

Nosso objetivo é configurar o apache httpd para funcionar como um proxy em frente ao contêiner Apache Tomcat Application.

Sistema operacional e versões de software

  • Sistema operacional: Red Hat Enterprise Linux 7.5
  • Programas: Apache httpd, apache tomcat

Requisitos

Acesso privilegiado ao sistema

Dificuldade

FÁCIL

Convenções

  • # - requer que os comandos Linux sejam executados com privilégios root diretamente como usuário root ou por uso de sudo comando
  • $ - dados os comandos do Linux a serem executados como um usuário não privilegiado regular

Introdução

Usar o Apache HTTPD como proxy para um contêiner Apache Tomcat Apache é uma configuração comum. Ele vem com muitos casos de uso, o mais trivial está servindo conteúdo estático de httpd, ao fornecer serviços que implementam a lógica de negócios pesados ​​de um aplicativo escrito em Java que reside no contêiner Tomcat.

Ao criar um proxy, podemos criar uma espécie de front-end para a camada de aplicativos, onde podemos introduzir medidas de segurança no servidor da web, aplicar balanceamento de carga, usar redirecionamento condicional ou usar qualquer outra funcionalidade fornecida pelo servidor da web. Dessa forma, não precisamos implementar nenhum desses recursos em nosso aplicativo e podemos focar suas capacidades no próprio serviço. Teremos um servidor da web completo apresentado para os usuários, alguns dos URLs encaminhados silenciosamente para o contêiner de aplicativos que podem não ser acessíveis por si só. As respostas do aplicativo são encaminhadas de volta aos clientes que não saberão que falaram mais alguma do que uma camada.

Usaremos o protocolo AJP que pode ser usado entre os servidores da web e os contêineres de aplicativos baseados em Java para fornecer a capacidade de equilibrar a carga entre vários servidores de aplicativos - no entanto, para configurar um balanceador de carga está fora do escopo deste tutorial.

Vamos configurar nossa configuração no Red Hat Linux 7.5, mas o servidor da web do Apache, o módulo AJP e o contêiner Apache Tomcat Application estão disponíveis em todos os lugares e, portanto, essa configuração é portátil com pequenos ajustes como caminhos do sistema de arquivos ou nomes de serviço.



Instalando o software necessário

Primeiro, precisamos instalar os serviços que usaremos. Em uma configuração balanceada de carga, os servidores Tomcat (s) podem estar em diferentes máquinas e, muitas vezes, são, fornecendo uma fazenda de recipientes que construem um serviço.

# yum instalar httpd tomcat tomcat-webapps

Nós instalamos o Tomcat-Webapps Para fins de teste, neste pacote é um exemplo de aplicativo da web implantado em nosso servidor Tomcat na instalação. Usaremos este aplicativo para testar que nossa configuração está funcionando como pretendido.

Agora podemos ativar e iniciar nosso servidor Tomcat:

# SystemCtl Ativar Tomcat
# SystemCtl Start TomCat

E nosso servidor da web:

# SystemCtl Ativar httpd
# SystemCtl Iniciar httpd

O padrão httpd A instalação contém os módulos de proxy que precisamos. Para verificar se é assim, podemos consultar o servidor da web com apachectl:

# apachectl -m | Grep AJP proxy_ajp_module (compartilhado) 
cópia de

Nota 1.x versões apache usam mod_jk módulo em vez de proxy_ajp.

Configuração HTTPD

Os exemplos aplicativos da web implantados no TomCat são publicados após a instalação por padrão em Servidor-URL: 8080/Exemplos. Solicitações de proxy chegando à porta 80 do servidor (a porta HTTP padrão) solicitando algo do Servidor-URL/Exemplos ser servido pelo exemplos Aplicativo da Web implantado no tomcat. Os pedidos que chegam a qualquer outro URL no servidor serão servidos pelo servidor da web. Vamos configurar algum conteúdo estático para mostrar essa funcionalidade.

Em nosso exemplo, o servidor é chamado ws.Foobar.com. Para que o proxy funcione, crie um arquivo de texto com seu editor favorito no diretório de configuração do servidor da web, que é /etc/httpd/conf.d em sabores de chapéu vermelho, com a extensão de .conf. Nossa configuração não precisa que o Tomcat seja acessível diretamente, então usamos LocalHost como anfitrião -alvo no /etc/httpd/conf.d/exemplo_proxy.conf arquivo:

 Servidorname ws.Foobar.com proxyRequests off proxypass/exemplos ajp: // localhost: 8009/exemplos proxypassverse/exemplos ajp: // localhost: 8009/exemplos  
cópia de

Para estar do lado seguro, podemos verificar se nossa configuração está correta antes de aplicar com apachectl:

# apachectl ConfigTest Sintaxe OK 
cópia de

Se o teste de configuração retornar um erro como o seguinte:

Não foi possível resolver o nome do host ws.Foobar.com - ignorando!

Se significa que nosso Nome do servidor A diretiva é inválida, pois não pode ser resolvida pelo servidor da web. Ou precisamos registrá -lo no DNS (local ou global) ou fornecer uma linha no /etc/hosts arquivo que contém o endereço IP público do host seguido pelo nome que demos na configuração acima. Se o arquivo hosts já contiver o IP com outro nome (talvez o nome do host real), podemos adicionar o nome do servidor após o nome do host na mesma linha, a configuração funcionará.

Após o teste bem -sucedido, precisamos aplicar a nova configuração reiniciando o servidor da web:

# SystemCtl Reiniciar httpd


Configuração do tomcat

Com a instalação padrão, o contêiner Tomcat ouvirá solicitações de AJP em todas as interfaces na porta 8009. Isso pode ser verificado no arquivo de configuração principal:

# view/usr/share/tomcat/conf/server.XML […]   […] 
cópia de

Se não precisarmos do contêiner do Tomcat e dos aplicativos para serem acessíveis por si mesmos, podemos definir todos os conectores para ouvir apenas no host:

Endereço do conector = "127.0.0.1 "Port =…"

Para se inscrever, podemos reiniciar o Tomcat com:

# SystemCtl reinicie o tomcat

Em nossa máquina de laboratório, não fará isso, pois precisamos ver que somos servidos o mesmo conteúdo em ambas as portas 80 e 8080.

Teste

Nossa configuração mínima de proxy AJP está completa, podemos testá -la. Da linha de comando, podemos chamar de exemplos Aplicação diretamente na porta 8080:

$ wget http: // ws.Foobar.com: 8080/exemplos --2018-09-13 11: 00: 58-- http: // ws.Foobar.com: 8080/exemplos resolvendo WS.Foobar.com (ws.Foobar.com)… . 10.104.1.165 Conectando -se ao WS.Foobar.com (ws.Foobar.com) | 10.104.1.165 |: 8080… . conectado. Solicitação HTTP enviada, aguardando resposta… . 302 Localização encontrada:/Exemplos/[A seguir] --2018-09-13 11: 00: 58-- http: // ws.Foobar.com: 8080/ exemplos/ reutilizando a conexão existente com WS.Foobar.com: 8080. Solicitação HTTP enviada, aguardando resposta… . 200 OK Comprimento: 1253 (1.2k) [texto/html] Salvando para: 'Exemplos' 100%[===================================== =================================================== =================================================== ===================================>] 1.253 --.-K/S em 0s 2018-09-13 11:00:58 (102 MB/S)-'Exemplos' salvos [1253/1253]
cópia de

E veja o conteúdo fornecido:

$ exemplos de cauda 

Exemplos Apache Tomcat

  • Exemplos de servlets
  • Exemplos JSP
  • Exemplos WebSocket (JSR356)
  • Exemplos de webSocket usando a API proprietária de Apache Tomcat depreciada
cópia de

E se chamarmos o mesmo aplicativo através de nosso proxy AJP, também devemos obter uma resposta, enquanto não há conteúdo na raiz do documento do servidor da web:

$ wget http: // ws.Foobar.com/exemplos --2018-09-13 11: 01: 09-- http: // ws.Foobar.com/exemplos resolvendo WS.Foobar.com (ws.Foobar.com)… . 10.104.1.165 Conectando -se ao WS.Foobar.com (ws.Foobar.com) | 10.104.1.165 |: 80… . conectado. Solicitação HTTP enviada, aguardando resposta… . 302 Localização encontrada:/Exemplos/[A seguir] --2018-09-13 11: 01: 09-- http: // ws.Foobar.com/ exemplos/ reutilizando a conexão existente com WS.Foobar.com: 80. Solicitação HTTP enviada, aguardando resposta… . 200 OK Comprimento: 1253 (1.2k) [texto/html] Salvando para: 'Exemplos.1 '100%[================================================ =================================================== =================================================== ========================>] 1.253 --.-K/S em 0s 2018-09-13 11:01:09 (101 MB/s)-'Exemplos.1 'salvo [1253/1253]
cópia de

Se tudo funcionar, obteremos uma resposta com o mesmo conteúdo, pois a resposta final é fornecida pelo mesmo aplicativo dentro do contêiner:

$ exemplos de cauda.1 

Exemplos Apache Tomcat

[… .]
cópia de

Também podemos testar nossa configuração com um navegador. Precisamos ligar para todos os URLs com o nome do servidor como o host (pelo menos o que é proxado). Para isso, a máquina que executa o navegador precisa ser capaz de resolver o nome do servidor, por meio do arquivo DNS ou hosts.

Em nosso ambiente de laboratório, não desativamos o Tomcat ouvindo na interface pública, para que possamos ver o que é fornecido quando solicitado diretamente na porta 8080:



Tomcat fornecendo o pedido de exemplos

Podemos obter o mesmo conteúdo que o proxy AJP fornecido pelo servidor da web na porta 80:

httpd fornecendo o aplicativo de exemplos com proxy AJP

Enquanto agia como proxy, httpd pode servir a qualquer outro conteúdo. Podemos criar conteúdo estático acessível em algum outro URL no mesmo servidor:

# mkdir/var/www/html/static_content # echo "static content">/var/www/html/static_content/static.html
cópia de

Ao apontar nosso navegador para este novo recurso, recebemos o novo conteúdo estático.

Conteúdo estático fornecido por httpd

Se o contêiner do Tomcat não estivesse alcançável, não saberíamos a resposta que vinha em outro lugar que não o servidor da web. À medida que procuramos apenas um aplicativo específico, o aplicativo root padrão do contêiner não é acessível.

Conclusão

O servidor da web do Apache é altamente extensível pelos meios de módulos, um deles é o módulo de proxy do AJP. O guia acima usa uma máquina e expõe um aplicativo com o proxy, mas o mesmo servidor da web pode fornecer uma única entrada para muitos aplicativos, possivelmente em muitos hosts que executam contêineres de aplicativos, fornecendo outros conteúdos da Web também.

Combinado com outros módulos, como mod_security, Podemos adicionar muitos recursos ao nosso serviço sem a necessidade de desenvolvê -los dentro do aplicativo ou, se necessário, redirecionar o proxy para outro terminal com uma única edição do arquivo de configuração e recarregar o servidor da web, fazendo uma migração ou o Introdução do novo lançamento do aplicativo Uma questão de segundos. A mesma recarga pode levar o visitante a uma página explicando o tempo de inatividade planejado, enquanto a manutenção é realizada nos servidores de aplicativos - os casos de uso de um proxy AJP são limitados apenas pela imaginação da equipe de TI.

Tutoriais do Linux relacionados:

  • Ubuntu 20.04 Instalação do Tomcat
  • Coisas para instalar no Ubuntu 20.04
  • Coisas para fazer depois de instalar o Ubuntu 20.04 fossa focal linux
  • Arquivos de configuração do Linux: os 30 primeiros mais importantes
  • Download do Linux
  • Linux pode obter vírus? Explorando a vulnerabilidade do Linux…
  • Tutorial de configuração de proxy de lula no Linux
  • Melhor distro Linux para desenvolvedores
  • Guia de solução de problemas gerais GNU/Linux para iniciantes
  • Coisas para fazer depois de instalar o Ubuntu 22.04 Jellyfish…