1 votes

ZEUS ZXTM rompt la demande HTTP à une servlet Java HTTP 404 ?

J'ai un servlet Java appelé "ARI" qui récupère des données dans une base de données d'archives et renvoie une charge utile XML contenant des lignes de cette base de données.

Nous avons plusieurs instances de ce servlet qui fonctionnent sur des serveurs virtuels à partir d'une seule boîte et qui sont accessibles par un numéro de port différent, comme suit :

testserver.co.uk:61061/aricp/ari

testserver.co.uk:61062/aricp/ari

Il est possible d'accéder à ces deux servlets directement depuis le client. Voici un exemple de conversation entre le client et le serveur prise par capture de paquets.

Requête HTTP réussie :

POST /aricp/ari HTTP/1.1 Accept-Charset : UTF-8

Content-Type : application/x-www-form-urlencoded;charset=UTF-8

User-Agent : Java/1.6.0_25

Hôte : testserver.co.uk:61061

Accepter : text/html, image/gif, image/jpeg, * ; q=.2, / ; q=.2

Connexion : keep-alive

Content-Length : 11

id=1-134ISR

notez la variable POST "id" dans la requête

Réponse réussie

HTTP/1.1 200 OK

Serveur : Sun-ONE-Web-Server/6.1

Date : Tue, 08 Jan 2013 17:48:49 GMT

Content-type : text/html

Transfert-encodage : chunked

03a6


*Successful HTTP Request Server Log *

[09/Jan/2013:10:25:33] fine (16359) : pour l'hôte 10.232.191.87 essayant de GET /aricp/ari, ntrans-j2ee rapporte : mapped uri "/ari" in context "/aricp" to resource "ARI"

Il est donc possible d'envoyer des demandes directes à notre servlet, mais si nous utilisons ZEUS ZXTM pour gérer indirectement les demandes du client à toutes les instances de notre servlet, cela ne fonctionne pas.

Voici une requête HTTP échouée ; notez la différence dans l'adresse HOST car ZEUS est l'intermédiaire.

Echec de la requête HTTP de ZEUS

POST /aricp/ari HTTP/1.1 Accept-Charset : UTF-8

Content-Type : application/x-www-form-urlencoded;charset=UTF-8

User-Agent : Java/1.6.0_25

Hôte : zeus.co.uk:61061

Accepter : text/html, image/gif, image/jpeg, * ; q=.2, / ; q=.2

Connexion : keep-alive

Content-Length : 11

id=1-PUZK7D

Echec de la réponse HTTP de ZEUS

HTTP/1.1 404 Non trouvé

Serveur : Sun-ONE-Web-Server/6.1

Date : Tue, 08 Jan 2013 18:05:45 GMT

Contenu-longueur : 292

Content-type : text/html

Lorsqu'on utilise ZEUS, le serveur Web ne parvient pas à interpréter la demande provenant de ZEUS comme une demande de servlet, mais semble interpréter l'URI de la demande comme un chemin d'accès à un fichier et nous obtenons un 404 not found.

Journal du serveur des requêtes HTTP échouées de ZEUS

[09/Jan/2013:10:50:45] warning (16886) : pour l'hôte 10.232.184.53 essayant de GET /aricp/ari, send-file rapporte : HTTP4142 : can't find /u02/SunONE61060/docs/aricp/ari (Fichier non trouvé)

Comme vous pouvez le voir, il traite l'uri comme un chemin de répertoire au lieu d'un chemin d'application.

C'est un problème très étrange.


Les choses que j'ai essayées

  • Suppression de la liste de contrôle d'accès pour s'assurer qu'aucun accès n'a été restreint.
  • Rafraîchissement de la servlet et du serveur virtuel
  • Rafraîchissant ZEUS
  • Redémarrage du serveur Web Sun One
  • Réinstallation d'une servlet sur un serveur virtuel

En résumé, tout fonctionne bien :

Client --> Serveur

Cependant, cela ne fonctionne pas :

Client --ZEUS --> Serveur

Je suis sur le point d'aller rafraîchir l'installation d'un nouveau serveur virtuel et de voir ce qui se passe.

Toutes les idées ou théories sont les bienvenues.

0 votes

Je ne pense pas que cela ait quoi que ce soit à voir avec ZXTM, il semble que votre application dorsale dépende du fait que l'en-tête de l'hôte soit défini comme suit testserver.co.uk:61061 . Essayez une requête directement d'un client avec un en-tête d'hôte différent (via la manipulation de /etc/hosts ou autre) et voyez si cela échoue également.

0 votes

Merci, je viens de comprendre que cela a à voir avec mes "urlhosts" dans les paramètres du serveur virtuel. Y a-t-il un moyen de définir plusieurs urlhosts ?

0 votes

Donc, si je configure urlhosts = zeus.co.uk:61061, cela fonctionne depuis ZEUS mais je ne peux pas accéder directement à ma servlet, ce qui, je suppose, est une bonne chose du point de vue de la sécurité :S

1voto

faker Points 17246

Je ne sais pas pourquoi vous n'avez qu'un seul serveur dorsal, peut-être s'agit-il d'une configuration de test.
ZXTM est un puissant équilibreur de charge, il semble que vous l'utilisiez plus ou moins comme un proxy inverse actuellement.

Quoi qu'il en soit, la façon dont vous configurez habituellement quelque chose comme ça est :
- créer un enregistrement DNS comme myapp.example.com et le faire pointer vers une IP de trafic du cluster ZXTM
- configurer votre application dorsale pour écouter myapp.example.com
- créer un serveur virtuel dans le cluster ZXTM qui utilise l'IP de trafic
- créer un nouveau pool dans le cluster ZXTM et ajouter testserver.co.uk:61061 à elle
- affecter le nouveau pool au serveur virtuel créé

Vous pouvez ensuite accéder à votre demande via myapp.example.com .
Vous pouvez toujours accéder à l'application directement sur les nœuds dorsaux (par exemple, à des fins de surveillance), mais selon la façon dont l'application fonctionne, vous devrez peut-être ajuster l'en-tête d'hôte pour cela.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X