Comment configurer Apache Webserver Proxy devant Apache Tomcat sur Red Hat Linux
- 2009
- 238
- Lucas Bernard
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