--痛苦是人最好的试金石 Pain is man's best litmus test
问题:
答:
从你提供的 server.xml
配置文件中,可以看出你为域名 xxx.xxx.com
配置了 SSL,但在配置上有几个潜在的问题可能导致其他域名无法访问 HTTP 服务。以下是详细分析和建议:
1. 端口配置问题
- 你将
Connector
配置在443
端口上,并且启用了 SSL。这意味着这个端口只接受 HTTPS 请求。如果其他域名没有配置 SSL 证书,它们将无法通过 HTTPS 访问。 - 而且你没有配置一个单独的 HTTP 端口(例如默认的
8080
或80
端口),这会导致非 HTTPS 请求没有对应的处理端口,因而无法访问。
2. 未配置 HTTP Connector
- 如果你希望其他域名继续使用 HTTP 访问,建议你在
server.xml
中添加一个非 SSL 的 HTTPConnector
。例如,使用默认的 8080 端口: xml复制代码
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="443" />
3. redirectPort
配置
- 在现有的 HTTPS
Connector
中,你设置了redirectPort="8443"
,但其实你并没有配置这个端口。这个设置通常用于将 HTTP 请求重定向到 HTTPS,但在这个情况下,它可能会引起混乱。如果你不打算使用8443
端口,可以移除redirectPort
属性,或者确保 HTTP 连接器的redirectPort
配置正确。
4. SSL 证书与多个域名
- 当前 SSL 证书只适用于
xxx.xxxx.com
,如果其他域名需要使用 HTTPS,它们需要各自的 SSL 证书,或者你需要一个支持多个域名(SAN)的 SSL 证书。
解决方法:
-
添加 HTTP
Connector
:- 在
<Service name="Catalina">
内添加一个新的 HTTPConnector
,例如: xml复制代码
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="443" />
- 这样,未配置 SSL 的域名可以通过 HTTP 访问。
- 在
-
调整
redirectPort
设置:- 根据你是否需要将 HTTP 请求重定向到 HTTPS,选择保留或移除
redirectPort
。
- 根据你是否需要将 HTTP 请求重定向到 HTTPS,选择保留或移除
-
为其他域名配置 SSL:
- 如果希望其他域名也支持 HTTPS,你需要为它们配置相应的 SSL 证书,并在
server.xml
中为它们添加 SSLConnector
。
- 如果希望其他域名也支持 HTTPS,你需要为它们配置相应的 SSL 证书,并在
调整后,你的 server.xml
可能会如下所示(添加了 HTTP 连接器):
xml
复制代码
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="443" /> <Connector port="443" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" maxParameterCount="1000" SSLEnabled="true" scheme="https" secure="true" keystoreFile="conf/xxx.xxxx.com.jks" keystoreType="JKS" keystorePass="s1qgn5cp" clientAuth="false" SSLProtocol="TLSv1.1+TLSv1.2+TLSv1.3" ciphers="TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA256"/>
请根据你的实际需求和证书配置调整 server.xml
文件。完成这些修改后,重启 Tomcat 并测试各域名的访问情况。