很难理解 tomcat 文档,而且查看 server.xml 时,您会发现一堆难以理解的端口,因为文档中并没有真正正确或广泛地解释这些端口。
例如,配置文件中的这一行server.xml
<Connector port="8345" protocol="AJP/1.3" redirectPort="9875" />
在这里你还可以找到另一个重定向端口:
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
我理解连接器端口的作用。在第一种情况下,您使用它在 apache 中创建一个工作程序并将其发送到那里,在第二种情况下,您打开一个端口以直接访问 tomcat。但是,当谈到重定向端口时,事情就变得模糊了。
这里是tomcat文档对ajp端口给出的解释:
如果此连接器支持非 SSL 请求,并且收到匹配需要 SSL 传输的请求,则 Catalina 将自动将请求重定向到这里指定的端口号。
我总是选择一个超过 1024 的随机重定向端口,而且它有效,
但这什么时候才能付诸实践呢?它如何知道请求何时需要 SSL 传输?
我有一台运行 tomcat 模块的卫星服务器。此模块通过将流量从主服务器重定向到使用 apache 的 ajp 连接器以及反之亦然来发挥作用。
在主服务器中,apache 强制使用 https。这是否意味着所有请求都以加密或纯文本形式发送到卫星服务器?我知道如果我通过端口 8080 访问卫星服务器,它就不会被加密,但我想知道这是否也适用于重定向到主服务器的流量,以及这个重定向端口在哪里生效。
答案1
根据文档中的定义,当 SSL 请求到达服务器时,重定向端口将发挥作用,由于 http 连接器端口无法处理 SSL 请求,它将重定向到定义的端口。但必须在 server.xml 文件中定义另一个部分,其中定义的重定向端口将充当连接器端口来处理 SSL 请求。例如,如果您希望 http 请求由端口 80 处理,https 请求由端口 443 处理,则 server.xml 将如下所示:
<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="443" />
<Connector port="443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true" scheme="https" secure="true" sslProtocol="TLS" keystoreFile="/path/to/kestorefile" keystorePass="my_keystore_password"/>
Keystorefile 是您网站的 ssl 证书。
如果您没有将其他部分配置为连接器端口,则您的请求将不会重定向到该端口。例如,如果网站不支持 SSL 请求,而您尝试向该网站发送 https 请求,则会出现类似以下错误安全连接失败将显示在浏览器上。