近期由于项目需要,将购买的阿里云服务器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请求再试一次。
作者:请保持优秀。
原文链接:https://blog.csdn.net/IT_TIfarmer/article/details/90113730