近期由于项目需要,将购买的阿里云服务器Windows版换成了linux的CentOS版本,tomcat需要重新配置https协议,再次被server.xml里边的这几个connector搞得欲死欲仙,索性这次多深入写了解下它们的区别,也方便下以后跟我踩一样的坑的同学们。

我们要弄清楚的,是以下四个概念:

一、

在tomcat的配置文件中有以下几个常见端口:

8080和80都是HTTP端口,8443和443为HTTPS端口

8005为远程停服务端口

8009为AJP端口,APACHE能通过AJP协议访问TOMCAT的8009端口。

二、

当网址为http://时,默认端口为80

当网址为https://时,默认端口为443

以上两种都可以省略端口号,可以直接写成http://zzuxh.top/或https://zzuxh.top/,后边跟上我们项目的接口URI。

如果是http的8080端口,或者是https的8443端口,则不能省略,要在域名之后加上端口,如 http://zzuxh.top:8080/ 、 https://zzuxh.top:8443/

但默认情况下我们的server.xml里边只有一个http请求对应的8080端口connector是开启的,剩下的http和https端口:80,443,8443,前两个没有,最后一个被注释了,都需要手动配置启用。

三、

这四个http/https端口, 除了8080之外,都是tomcat固定的,不能改动。也就是说8080是可变的,我们可以把端口号是8080的那个connector,里的port改成别的端口,如8808,9123啥的。

四、

connector是可以多个同时存在的,意思就是我们可以同时把这四个端口的connector都配置了,这样的话,以下四个接口:

http://zzuxh.top/Sell/user/login

https://zzuxh.top/Sell/user/login

http://zzuxh.top:8080/Sell/user/login

https://zzuxh.top:8443/Sell/user/login

是同时有效的!只不过坏处是tomcat一启动会同时占据好多个端口。

 

有人可能会问:在一个connector里:

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

这个redirectPort属性又是什么意思呢?它为什么要重定向到8443端口呢?

首先我们要知道,请求的发送方,也就是客户端,可以指定请求的协议是http,还是https。 

既然如此,我们的后台服务器自然也可以指定自己接收哪种协议的请求,比如在springMVC和springboot框架里,我们可以通过设置RequestMapping的属性来确定接收http协议的请求还是https协议的请求,如果我们在一个controller里定义的一个方法,只处理https请求,而不处理http请求,我们就可以设置redirectPort="8443",来将请求转发到8443端口,这个转发是tomcat自己进行的,当http请求找不到对应的处理方法时,如果设置了这个属性,tomcat就会把它转成https请求再试一次。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐