在具有Java 9.3.8.v20160314
的AWS EC2 Linux计算机上运行的Jetty 1.8.0_51
在两个不同的上下文中定义了两个虚拟主机 - webapps/app1
和webapps/app2
,空webapps/ROOT
}目录。
每个网络上下文都有自己的SSL连接器,并指定了两个不同域名的正确密钥库,让我们说www.example1.com
和www.example2.com
。
问题是每个SSL连接器必须使用不同的端口,因此第一个应用程序将具有端口443
,但第二个应用程序将使用444
,这不是HTTPS调用的默认端口。现在,app2的客户将不得不使用https://www.example2.com:444
,这不是很漂亮。
是否有一些解决方法可以省略:444
部分?
也许可以在WebAppContext.xml上定义一些内容来将调用转发到端口444
,或者可能在DNS区域文件中?
也许这可以在Linux级别上使用iptables
?
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>
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>
SSL连接器设置为端口8444
,并由iptables
从外部端口444
转发 -
sudo iptables -t nat -I PREROUTING -p tcp --dport 444 -j REDIRECT --to-port 8444
答案 0 :(得分:1)
没有解决方法可以省略端口。如果指定没有端口的HTTPS URL,则实际上是隐式指定端口443。
我建议考虑在您的Jetty应用程序前放置一个Nginx反向代理,并根据所请求的域名将请求转发到相应的端口。