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