Comment configurer Apache Webserver Proxy devant Apache Tomcat sur Red Hat Linux

Comment configurer Apache Webserver Proxy devant Apache Tomcat sur Red Hat Linux

Objectif

Notre objectif est de configurer Apache httpd pour fonctionner comme un proxy devant le conteneur d'application Apache Tomcat.

Système d'exploitation et versions logicielles

  • Système opérateur: Red Hat Enterprise Linux 7.5
  • Logiciel: Apache httpd, Apache Tomcat

Exigences

Accès privilégié au système

Difficulté

FACILE

Conventions

  • # - Exige que les commandes Linux soient exécutées avec des privilèges racine soit directement en tant qu'utilisateur racine, soit par l'utilisation de Sudo commande
  • $ - Étant donné les commandes Linux à exécuter en tant qu'utilisateur non privilégié régulier

Introduction

L'utilisation d'Apache Httpd comme proxy d'un conteneur d'application Apache Tomcat est une configuration courante. Il est livré avec de nombreux cas d'utilisation, le plus trivial est de servir le contenu statique de httpd, Tout en fournissant des services implémentant une logique commerciale lourde à partir d'une application écrite en Java qui réside dans le conteneur Tomcat.

En créant un proxy, nous pouvons créer une sorte de frontal à la couche d'application, où nous pouvons introduire des mesures de sécurité dans le serveur Web, appliquer l'équilibrage de charge, utiliser une redirection conditionnelle ou utiliser toute autre fonctionnalité fournie par le serveur Web. De cette façon, nous n'avons pas besoin de mettre en œuvre l'une de ces fonctionnalités dans notre application et pouvons concentrer ses capacités au service lui-même. Nous aurons un serveur Web complet présenté pour les utilisateurs, certaines des URL transmises silencieusement au conteneur d'application qui peuvent ne pas être accessibles seuls. Les réponses de la demande sont transmises aux clients qui ne sauront pas qu'ils parlaient autrement que le serveur Web - c'est-à-dire si nous prenons soin de ne pas exposer les informations (comme les messages d'erreur non gérés) de l'application qui peut leur faire deviner qu'il y a plus qu'une seule couche.

Nous utiliserons le protocole AJP qui peut être utilisé entre les serveurs Web et les conteneurs d'application basés sur Java pour fournir la possibilité d'équilibrer la charge entre plusieurs serveurs d'application - cependant, la configuration d'un équilibreur de charge est hors de l'étendue de ce tutoriel.

Nous allons configurer notre configuration sur Red Hat Linux 7.5, mais le serveur Web Apache, le module AJP et le conteneur d'application Apache Tomcat sont disponibles partout, et donc cette configuration est portable avec de petits ajustements comme des chemins de fichier ou des noms de service.



Installation du logiciel requis

Nous devons d'abord installer les services que nous utiliserons. Dans une configuration équilibrée, un (s) serveur (s) Tomcat (s) pourraient être sur différentes machines, et souvent ils le sont, fournissant une ferme de conteneurs qui renforcent un service.

# yum install httpd tomcat tomcat-webapps

Nous installons le tomcat-webapps À des fins de test, dans ce package se trouve une application Web d'exemples déployée dans notre serveur Tomcat lors de l'installation. Nous utiliserons cette application pour tester que notre configuration fonctionne comme prévu.

Nous pouvons maintenant activer et démarrer notre serveur Tomcat:

# SystemCTL Activer Tomcat
# systemctl start tomcat

Et notre serveur Web:

# SystemCTL Activer Httpd
# systemctl start httpd

Le défaut httpd L'installation contient les modules proxy dont nous avons besoin. Pour vérifier qu'il en est ainsi, nous pouvons interroger le serveur Web avec apachectl:

# apachectl -m | grep ajp proxy_ajp_module (partagé) 
Copie

Note 1.X Versions Apache utilisent mod_jk module au lieu de proxy_ajp.

Configuration HTTPD

L'application Web d'exemples déployée dans Tomcat est publiée après l'installation par défaut sur Server-URL: 8080 / Exemples. Nous procurons les demandes à venir sur le port 80 du serveur (le port HTTP par défaut) demandant quelque chose au serveur-url / exemples être servi par le exemples Application Web déployée dans Tomcat. Les demandes venant à toute autre URL sur le serveur seront desserrées par le serveur Web. Nous allons configurer un contenu statique pour montrer cette fonctionnalité.

Dans notre exemple, le serveur est appelé WS.foobar.com. Pour que le proxy fonctionne, créez un fichier texte avec votre éditeur préféré dans le répertoire de configuration d'allumage du serveur Web, qui est / etc / httpd / confre.d sur les saveurs de chapeau rouge, avec l'extension de .confli. Notre configuration n'a pas besoin que Tomcat soit accessible directement, nous utilisons donc hôte local En tant qu'hôte cible dans le / etc / httpd / confre.d / example_proxy.confli déposer:

 Servername ws.foobar.com proxyrequests off proxypass / exemples ajp: // localhost: 8009 / exemples proxypassreverse / exemples ajp: // localhost: 8009 / exemples  
Copie

Pour être sûr, nous pouvons vérifier que notre configuration est correcte avant de postuler avec apachectl:

# Syntaxe de configuration apachectl OK 
Copie

Si le test de configuration renvoie une erreur comme celle suivante:

Impossible de résoudre le nom d'hôte ws.foobar.com - Ignorer!

Si signifie que notre Nom du serveur La directive n'est pas valide, car elle ne peut pas être résolue par le serveur Web. Soit nous devons l'enregistrer dans le DNS (local ou global), soit fournir une ligne dans le / etc / hôtes fichier qui contient l'adresse IP publique de l'hôte suivie du nom que nous avons donné dans la configuration ci-dessus. Si le fichier hôte contient déjà l'IP avec un autre nom (peut-être le nom d'hôte réel), nous pouvons ajouter le nom de serveur après le (s) nom (s) de l'hôte dans la même ligne, la configuration fonctionnera.

Après un test réussi, nous devons appliquer la nouvelle configuration en redémarrant le serveur Web:

# SystemCTL Redémarrer HTTPD


Configuration de Tomcat

Avec l'installation par défaut, le conteneur Tomcat écoutera les demandes AJP sur toutes les interfaces sur le port 8009. Cela peut être vérifié dans le fichier de configuration principal:

# Affichage / USR / Share / Tomcat / conf / Server.XML […]   […] 
Copie

Si nous n'avons pas besoin du conteneur Tomcat et des applications à l'intérieur pour être accessibles par eux-mêmes, nous pouvons définir chaque connecteur à écouter uniquement sur localhost:

Adresse du connecteur = "127.0.0.1 "port =…"

Pour postuler, nous pouvons redémarrer Tomcat avec:

# systemctl redémarrer tomcat

Dans notre machine de laboratoire, ne le fera pas, car nous devons voir que nous sommes servis le même contenu sur les deux port 80 et 8080.

Essai

Notre configuration de proxy AJP minimale est terminée, nous pouvons le tester. À partir de la ligne de commande, nous pouvons appeler le exemples application directement sur le port 8080:

$ wget http: // ws.foobar.com: 8080 / Exemples --2018-09-13 11: 00: 58-- http: // ws.foobar.com: 8080 / exemples résolvant ws.foobar.com (ws.foobar.com)… . dix.104.1.165 Connexion à WS.foobar.com (ws.foobar.com) | 10.104.1.165 |: 8080… . connecté. Demande HTTP envoyée, en attente de réponse… . 302 Emplacement trouvé: / Exemples / [suivant] --2018-09-13 11: 00: 58-- http: // ws.foobar.com: 8080 / exemples / réutiliser la connexion existante à WS.foobar.com: 8080. Demande HTTP envoyée, en attente de réponse… . 200 ok longueur: 1253 (1.2K) [Texte / HTML] Économie sur: «Exemples» 100% [================================================ ==============================================. ==============================================. ==================================>] 1 253 --.-K / s dans 0S 2018-09-13 11:00:58 (102 Mo / s) - «Exemples» enregistrés [1253/1253]
Copie

Et voir le contenu fourni:

$ Exemples de queue 

Exemples Apache Tomcat

  • Exemples des servlets
  • Exemples JSP
  • Exemples WebSocket (JSR356)
  • Exemples WebSocket utilisant l'API propriétaire d'Apache Tomcat déconnectée
Copie

Et si nous appelons la même application Trough notre proxy AJP, nous devons également obtenir une réponse, bien qu'il n'y ait pas de contenu dans la racine du document du serveur Web:

$ wget http: // ws.foobar.com / Exemples --2018-09-13 11: 01: 09-- http: // ws.foobar.com / exemples résolvant WS.foobar.com (ws.foobar.com)… . dix.104.1.165 Connexion à WS.foobar.com (ws.foobar.com) | 10.104.1.165 |: 80… . connecté. Demande HTTP envoyée, en attente de réponse… . 302 Emplacement trouvé: / Exemples / [suivant] --2018-09-13 11: 01: 09-- http: // ws.foobar.com / exemples / réutiliser la connexion existante à ws.foobar.com: 80. Demande HTTP envoyée, en attente de réponse… . 200 ok longueur: 1253 (1.2K) [Texte / HTML] Enregistrement à: «Exemples.1 '100% [==========================================. ==============================================. ==============================================. ========================>] 1,253 --.-K / s dans 0S 2018-09-13 11:01:09 (101 Mo / s) - 'Exemples.1 'enregistré [1253/1253]
Copie

Si tout fonctionne, nous obtiendrons une réponse avec le même contenu, car la réponse finale est fournie par la même application dans le conteneur:

$ Exemples de queue.1 

Exemples Apache Tomcat

[… .]]
Copie

Nous pouvons également tester notre configuration avec un navigateur. Nous devons appeler toutes les URL avec le nom du serveur en tant qu'hôte (au moins celui qui est proxymé). Pour cela, la machine exécutant le navigateur doit être en mesure de résoudre le nom du serveur, au moyen du fichier DNS ou Hosts.

Dans notre environnement de laboratoire, nous n'avons pas désactivé l'écoute de Tomcat sur l'interface publique, nous pouvons donc voir ce qui est fourni lorsqu'il est demandé directement sur le port 8080:



Tomcat fournissant l'application d'exemples

Nous pouvons obtenir le même contenu à travers le proxy AJP fourni par le serveur Web sur le port 80:

HTTPD fournissant l'application d'exemples avec un proxy AJP

Tout en agissant comme un proxy, httpd peut servir tout autre contenu. Nous pouvons créer un contenu statique accessible sur une autre URL sur le même serveur:

# mkdir / var / www / html / static_content # echo "contenu statique"> / var / www / html / static_content / statique.html
Copie

En pointant notre navigateur vers cette nouvelle ressource, nous avons le nouveau contenu statique.

Contenu statique fourni par httpd

Si le conteneur Tomcat ne serait pas accessible, nous ne saurions pas la réponse qui arrive ailleurs que le serveur Web. Comme nous ne nous procurions qu'une application spécifique, l'application racine par défaut du conteneur n'est pas accessible dans le proxy, ainsi caché de tout au-delà du serveur Web.

Conclusion

Le serveur Web Apache est fortement extensible par les moyens des modules, l'un d'eux est le module proxy AJP. Le guide ci-dessus utilise une machine et expose une application avec le proxy, mais le même serveur Web pourrait fournir une seule entrée à de nombreuses applications, peut-être sur de nombreux hôtes exécutant des conteneurs d'applications, tout en fournissant un autre contenu Web également.

Combiné avec d'autres modules, comme mod_security, Nous pouvons ajouter de nombreuses fonctionnalités à notre service sans avoir besoin de les développer dans l'application, ou si le besoin se pose, redirigez le proxy vers un autre point de terminaison avec une seule édition du fichier de configuration et le rechargement du webserver, en faisant une migration ou à la migration ou à la migration ou à la migration ou à la migration ou à la migration ou à la migration ou à la migration ou à la migration ou à Introduction de la nouvelle version de l'application en quelques secondes. Le même rechargement peut conduire le visiteur à une page expliquant les temps d'arrêt planifiés, tandis que la maintenance est effectuée sur les serveurs d'application - les cas d'utilisation d'un proxy AJP ne sont limités que par l'imagination du personnel informatique.

Tutoriels Linux connexes:

  • Ubuntu 20.04 Installation de Tomcat
  • Choses à installer sur Ubuntu 20.04
  • Choses à faire après l'installation d'Ubuntu 20.04 Focal Fossa Linux
  • Fichiers de configuration Linux: 30 premiers
  • Téléchargement Linux
  • Linux peut-il obtenir des virus? Exploration de la vulnérabilité de Linux…
  • Tutoriel de configuration de Squid Proxy sur Linux
  • Meilleure distribution Linux pour les développeurs
  • Guide de dépannage général GNU / Linux pour les débutants
  • Choses à faire après l'installation d'Ubuntu 22.04 Jammy Jellyfish…