2016-04-18 1 views
0

jetée 9.3.8.v20160314 fonctionnant sur la machine Linux AWS EC2 avec Java 1.8.0_51 a deux hôtes virtuels définis dans deux contextes différents - webapps/app1 et webapps/app2 avec un répertoire webapps/ROOT vide.Utilisation du port HTTPS non par défaut, sans l'écrire dans l'URL sur la jetée/Linux

Chaque contexte Web a son propre connecteur SSL avec un fichier de clés approprié, de deux noms de domaine différents, par exemple www.example1.com et www.example2.com. Le problème est que chaque connecteur SSL doit utiliser un port différent, donc la première application aurait le port 443 mais la seconde utiliserait 444, qui n'est pas le port par défaut pour les appels HTTPS. Maintenant, les clients d'app2 devraient utiliser https://www.example2.com:444 ce qui n'est pas joli.

Est-il possible de supprimer la pièce :444?

Peut-être qu'il est possible de définir quelque chose sur WebAppContext.xml pour transférer les appels vers le port 444, ou peut-être dans le fichier de zone DNS?

Peut-être que cela peut être fait au niveau Linux, en utilisant iptables?

Contenu de webapps/appX.xml -

<?xml version="1.0" encoding="ISO-8859-1"?> 
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd"> 

<Configure class="org.eclipse.jetty.webapp.WebAppContext"> 
    <Set name="contextPath">/</Set> 
    <Set name="war"> 
    <SystemProperty name="jetty.home" default="."/>/webapps/appX 
    </Set> 
    <Set name="virtualHosts"> 
    <Array type="java.lang.String"> 
     <Item>www.exampleX.com</Item> 
    </Array> 
    </Set> 

    <!-- by Code Range --> 
    <Get name="errorHandler"> 
    <Call name="addErrorPage"> 
     <Arg type="int">400</Arg> 
     <Arg type="int">599</Arg> 
     <Arg type="String">/</Arg> 
    </Call> 
    </Get> 
</Configure> 

Contenu de etc/jetty-ssl.xml -

<Configure id="Server" class="org.eclipse.jetty.server.Server"> 
    ... 
    <Call name="addConnector"> 
    <Arg> 
     <New id="sslConnector2" class="org.eclipse.jetty.server.ServerConnector"> 
     <Arg name="server"><Ref refid="Server" /></Arg> 
     <Arg name="acceptors" type="int"><Property name="jetty.ssl.acceptors" deprecated="ssl.acceptors" default="-1"/></Arg> 
     <Arg name="selectors" type="int"><Property name="jetty.ssl.selectors" deprecated="ssl.selectors" default="-1"/></Arg> 
     <Arg name="factories"> 
      <Array type="org.eclipse.jetty.server.ConnectionFactory"> 
      </Array> 
     </Arg> 

     <Set name="host"><Property name="jetty.ssl.host" deprecated="jetty.host" /></Set> 
     <Set name="port">8444</Set> 
     <Set name="idleTimeout"><Property name="jetty.ssl.idleTimeout" deprecated="ssl.timeout" default="30000"/></Set> 
     <Set name="soLingerTime"><Property name="jetty.ssl.soLingerTime" deprecated="ssl.soLingerTime" default="-1"/></Set> 
     <Set name="acceptorPriorityDelta"><Property name="jetty.ssl.acceptorPriorityDelta" deprecated="ssl.acceptorPriorityDelta" default="0"/></Set> 
     <Set name="acceptQueueSize"><Property name="jetty.ssl.acceptQueueSize" deprecated="ssl.acceptQueueSize" default="0"/></Set> 
     </New> 
    </Arg> 
    </Call> 
    ... 
</Configure> 

connecteur SSL est réglé sur le port 8444 et transmis par iptables du port externe 444 -

sudo iptables -t nat -I PREROUTING -p tcp --dport 444 -j REDIRECT --to-port 8444 

Répondre

1

Th Il n'y a aucune solution de contournement pour omettre le port. Si vous spécifiez une URL HTTPS sans port, vous spécifiez implicitement le port 443.

Je suggérerais de placer un proxy inverse Nginx devant vos applications Jetty, et de transférer les demandes au port approprié sur le nom de domaine demandé.