Tomcat 使用 https 处理多个域

Tomcat handling multple domains using https

我有一个 Tomcat 安装 server.xml 并且正在尝试处理多个域。

这是一个 Linux 安装,Apache 代理请求到 Tomcat。

<Connector port="8223" protocol="org.apache.coyote.http11.Http11NioProtocol" scheme="https" secure="true"
               keystoreFile="/root/keystore.jks" 
               keystorePass="xxx" clientAuth="false" sslProtocol="TLS"
               SSLEnabled="true" proxyPort="443"/>

当密钥库文件具有单个域的条目时 - 它有效。

我试图附加另一个域 - 但它不起作用。第一个仍然如此。

有什么帮助吗?

已添加

现在在域的 Apache conf 文件中,我有一个用于 https 连接的 VirtualHost 并且

SSLProxyEngine On

ProxyPreserveHost On
ProxyPass         /xxx  https://localhost:8227/xxx
ProxyPassReverse  /xxx  https://localhost:8227/xxx

我应该把它改成??

ProxyPreserveHost On
ProxyPass         /xxx  http://localhost:8226/xxx
ProxyPassReverse  /xxx  http://localhost:8226/xxx

有一个 HTTP 连接器正在侦听 8226。

正确吗?

从 Tomcat 8.5 开始,每个连接器有多个证书可用(参见 migration guide)。

但是在你的情况下,我没有看到 任何 加密 Apache Httpd 和 Tomcat 之间的通信的安全优势:除非我弄错了,否则它们在同一主机,所有通信都通过环回设备,而不是真正的网络接口。

编辑:Apache服务器的HTTP和HTTPS都可以转发到相同的纯文本<Connector>。为了Tomcat区分两种类型的请求,需要配置Apache发送X-Forwarded-Proto头:

RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}

并添加一个RemoteIpValve<Engine><Host>配置块:

<Valve className="org.apache.catalina.valves.RemoteIpValve" />

(参见documentation)。使用最新的 7.0 服务器(版本 7.0.94 之后),您无需修改​​任何 <Valve> 的默认参数。