Serveur Web Glassfish Server derrière Apache HTTP Server

Salut Nous avons commencé à créer nos applications avec J2EE. Nous avons maintenant créé un Webservice et l’avons déployé sur le serveur Glassfish. Nous avons écrit une règle de proxy apache pour y accéder via https://our.server.com/webservice-war (seul le port https est ouvert sur ce serveur):

ProxyRequests Off ProxyPass /webservice-war http://our.server.com:8080/webservice-war ProxyPassReverse /webservice-war http://our.server.com:8080/webservice-war 

Maintenant, tout fonctionne bien, mais quand on va à la page ServiceEndpoint (qui est automatiquement générée), il y a un lien vers la page WSDL: http://our.server.com:8080/webservice-war/HostaliasSearchImplService?wsdl

ce qui est obèse (Glassfish écoute le port 8080). et aussi https est changé en http

Quelqu’un a une idée de comment je peux le réparer, que le lien généré automatiquement est:

https://our.server.com/webservice-war/HostaliasSearchImplService?wsdl

BR, René

J’ai découvert ce que je considère être une manière très simple et élégante de traiter le problème: utilisez mod_substitute. Comme ceux d’entre nous qui ont ce problème utilisent déjà Apache, et c’est simple et intégré, j’ai aimé cette approche.

J’ai mis un bloc similaire à celui ci-dessous dans l’un de mes fichiers de configuration Apache et j’ai trouvé la joie:

  AddOutputFilterByType SUBSTITUTE text/xml Substitute "s|http://internal:8080/foo|https://external/foo|ni"  

Trouvé la solution!

Anonym m’a donné une bonne idée de mod_jk. Alors voici la configuration complète (pour RHEL5).

Tout d’abord, téléchargez le module mod_jk pour apache: http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/linux/jk-1.2.31/x86_64/

Mettez dans le répertoire modules / etc / httpd / modules et rendez-le exécutable:

 chmod +x mod_jk-1.2.31-httpd-2.2.x.so 

Après cela, créez /etc/httpd/conf/workers.properties:

 # Define 1 real worker using ajp13 worker.list=worker1 # Set properties for worker1 (ajp13) worker.worker1.type=ajp13 worker.worker1.host=localhost worker.worker1.port=8009 

Le port 8009 est l’endroit où le connecteur Glassfish jk écoute (nous y reviendrons plus tard).

Non, nous devons configurer mod_jk, donc créez le fichier: /etc/httpd/conf.d/mod_jk.conf avec le contenu suivant:

 LoadModule jk_module modules/mod_jk-1.2.31-httpd-2.2.x.so JkWorkersFile /etc/httpd/conf/workers.properties # Where to put jk logs JkLogFile /var/log/httpd/mod_jk.log # Set the jk log level [debug/error/info] JkLogLevel debug # Select the log format JkLogStampFormat "[%a %b %d %H:%M:%S %Y] " # JkOptions indicate to send SSL KEY SIZE, JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories # JkRequestLogFormat set the request format JkRequestLogFormat "%w %V %T" # Send everything for context /atsi-war to worker named worker1 (ajp13) JkMount /yourapp-war/* worker1 

(Cela signifie tout de votre http://apache.webserver.com/yourapp-war/ sera redirigé vers le contexte de votre application Glassfish yourapp-war)

Important: si vous utilisez des hôtes virtuels sur Apache, vous devez définir l’option: JkMountCopy On pour vos serveurs virtuels. Explication:

Si cette directive est définie sur “On” sur certains serveurs virtuels, les assemblys du serveur global seront copiés sur ce serveur virtuel, plus précisément tous les assemblys définis par JkMount ou JkUnMount.

Maintenant, nous devons créer le connecteur jk dans glassfish:

 asadmin create-http-listener --listenerport 8009 --listeneraddress 0.0.0.0 --defaultvs server jk-connector asadmin set configs.config.server-config.network-config.network-listeners.network-listener.jk-connector.jk-enabled=true 

Redémarrez Glassfish et tout devrait fonctionner.

Quant à la réécriture du https -> http, je ne suis pas sûr que ce soit possible (encore) sans utiliser mod_jk, voir ici , mais aussi voir ce petit guide

Bien que vous ayez généralement besoin de configurer Glassfish et de définir http.proxyPort (et probablement aussi http.proxyHost). J’espère que cela devrait refléter l’URL WSDL générée automatiquement.

Voici 3 façons différentes de le faire:

1 Utilisez asadmin (dans le répertoire / bin Glassfish, exécutez

 asadmin create-jvm-options "-Dhttp.proxyPort=80" asadmin create-jvm-options "-Dhttp.proxyHost=our.server.com" 

2 Modifiez le fichier domain.xml et ajoutez-le sous l’élément

  -Dhttp.proxyPort=80 -Dhttp.proxyHost=our.server.com 

3. Ouvrez la page Web d’administration Glassfish, sous Serveur d’applications -> Paramètres VM -> Options JVM et ajoutez ces options.

 http.proxyPort=80 http.proxyHost=our.server.com 

Réglage

 server-config.network-config.protocols.protocol.http-listener-1.http.server-name=MyHost:80 

sur GlassFish Server Open Source Edition 3.1.2.2 (build 5) problème résolu pour moi.