今天做项目遇到一个需求就是直接通过域名访问项目时不带项目名称并且会自动跳转到https,但是tomcat默认的是8080和8443,然后windows系统对应的是80和443,所以很多人就理所当然的就将8080改成80,8443改成443,事实并非如此,我也百度了很多文章,但是大多都是抄来抄去,问题非但没有解决还误导人,我也是被折腾了好久,废话不多说,直接进入主题:
1.改端口:8080改成80,8443改成443。 所有的redirectPort="8443"都要改成redirectPort="443"
2.SSL证书自己可以到阿里云上面申请免费的 https://common-buy.aliyun.com...
申请证书后按照此步骤配置: https://help.aliyun.com/docum...
3.域名直接访问(不加项目名):修改<host></host>标签,demo为项目名称,域名地址以百度为例
<Host name="baidu.com" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Context docBase="demo" path="/demo" reloadable="true" crossContext="true"/> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> </Host>
3.配置好后到tomcat的conf目录下面修改web.xml文件,在最下面添加标签
<security-constraint> <web-resource-collection> <web-resource-name>SSL</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint>
4.通过以上配置就可以实现baidu.com直接跳转成 https://www.baidu.com
5.如果存在端口被占用的情况需要自行解决了,以443端口为例,通过输入 netstat -ano|findstr 443
可以查看443端口被哪个进程占用了,然后去任务管理器中找到对应的进程并结束掉
如上图,443端口被5004进程占用,当然每个人的电脑不一样,之前这个端口是被进程4占用的,在任务管理器中查看这个进程,有的小伙伴发现在任务管理器不知道怎么找这个进程4,看下图
结果发现这个进程是一个 NT Kernel & System
,具体什么意思我也不清楚,关键这是个系统进程我也不敢随意杀掉,然后百度找到一个方法:
1、打开regedit 2、找到HKEY_LOCAL_MACHINE目录 3、找到System 4、找到CurrentControlSet 5、找到Services 6、找到http 7、右边栏:找到start 8、打开,将3改为4,确定 9、重启电脑,就解除了NT Kernel & System占用443端口
可以借鉴这篇文章 https://blog.csdn.net/u012554... 下面是我修改后的,我在tomcat根目录下新建一个webroot文件夹,然后 appBase="webroot" ,path里面不填,docBase填写绝对路径,重启tomcat就没有重复加载项目了