springboot部署到阿里云,配置https,springboot项目同时支持http和https请求,阿里云配置https
最近在学习springboot,感觉springboot开发后台,提供api接口太方便了。简直是傻瓜式开发,一直都是本地在跑springboot项目。梦想着有一天,项目能在阿里云上跑。只有在阿里云上跑才是真正的java服务器项目。这里就带大家一起把springboot项目部署到阿里云,并且支持https
准备工作
- 阿里云ecs一个
- 域名一个(我的是https://30paotui.com)
- ca证书一份(用来支持https)
- 本地打包好的springboot项目。我这里用jar不用war
- ftp客户端一个,用来把jar传到阿里云服务器上,我用的是filezilla客户端,可以百度下载。
一,购买阿里云ecs配置安全组规则
- 如果不配置安全组规则,我们将没法访问我们阿里云服务器 ,下图中的80/80和443/443必须配置,因为只有这里配置了才能支持http和https访问我们的网站
- 配置如下,授权对象哪里最好填0.0.0.0/0
二,买域名
至于域名怎么买,我就不啰嗦了,不会的自行百度
30paotui.com我买的域名
三,通过filezilla连接阿里云服务器,运行项目
我在我的服务器home目录下新建一个jar文件,把打包好的springboot的jar包放到这里,我的是qcl80.jar
然后就可以通过 java -jar qcl80.jar 运行springboot项目
注意:这样运行springboot项目,如果你关闭当前shell窗口,就会导致服务器的springboot关闭。因为我们现在用的是springboot自带的tomcat,不能在后台运行。
springboot生成的jar在阿里云的linux服务器后台运行,不会在shell客户端关闭时关闭
通过创建stop.sh , start.sh ,run.sh这三个脚本文件来实现后台长久运行springboot
这里我把运行的qcl80.jar ,start .sh,stop.sh ,run.sh都放在home下的jar目录下
1,创建stop.sh
vim stop.sh 创建文件然后把下面内容复制进去,一定要把qcl80.jar替换成你的jar
#!/bin/bash PID=$(ps -ef | grep qcl80.jar | grep -v grep | awk '{ print $2 }') if [ -z "$PID" ] then echo Application is already stopped else echo kill $PID kill $PID fi
2,创建start.sh,这里我们用80端口,这样可以直接通过ip访问,不用再输端口了
vim start.sh 输入这个命令后然后把下面的内容复制进去
#!/bin/bash nohup java -jar qcl80.jar --server.port=80 &
3,创建run.sh
整合了关闭和启动的脚本:run.sh,由于会先执行关闭应用,然后再启动应用,这样不会引起端口冲突等问题,适合在持续集成系统中进行反复调用。
把下面内容复制进去,一定要注意复制时不能少东西
#!/bin/bash echo stop application source stop.sh echo start application source start.sh
4,start .sh,stop.sh ,run.sh都创建后
./run.sh 运行run.sh脚本
如果遇到没有权限运行的问题,就在run.sh所在目录下执行
chmod u+x *.sh 这样就ok了。
执行完以后,我们可以去nohup.out文件中查看启动的log
cat nohup.out 这个命令可以查看jar启动的log
到此我们的springboot项目就启动了,可以通过你阿里云的公网ip访问你的网站了
由于我配置了https,所以这里用IP访问会显示不安全,接下来给大家讲解怎么配置https访问。
四,配置https
1,申请阿里云免费的ca证书,ca证书是实现https必不可少的
通常审核10分钟左右就行,如果资料不全或者不真实可能就久些。
- 购买完ca证书,并且审核通过后,就去下载相应的ca证书,由于我们springboot内置的是tomcat,所以我们这里下载tomcat对于的ca证书
下载后解压
然后在我们的springboot配置文件中配置
注意:214590826650132.pfx还需要在我们能阿里云的home/jar目录下放一份,即和我们的打包jar放在同一个目录下
HTTP自动转向HTTPS
实现http转https就是我们访问
30paotui.com
www.30paotui.com
http://30paotui.com
http://www.30paotui.com
都会指向https://30paotui.com
- 实现上面的功能需要我们在springboot的application中配置如下代码
package com.qcl; import org.apache.catalina.Context; import org.apache.catalina.connector.Connector; import org.apache.tomcat.util.descriptor.web.SecurityCollection; import org.apache.tomcat.util.descriptor.web.SecurityConstraint; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer; import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer; import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory; import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory; import org.springframework.context.annotation.Bean; @SpringBootApplication public class SellApplication implements EmbeddedServletContainerCustomizer { public static void main(String[] args) { SpringApplication.run(SellApplication.class, args); } //拦截所有请求 @Bean public EmbeddedServletContainerFactory servletContainer() { TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory() { @Override protected void postProcessContext(Context context) { SecurityConstraint constraint = new SecurityConstraint(); constraint.setUserConstraint("CONFIDENTIAL"); SecurityCollection collection = new SecurityCollection(); collection.addPattern("/*"); constraint.addCollection(collection); context.addConstraint(constraint); } }; tomcat.addAdditionalTomcatConnectors(httpConnector()); return tomcat; } //配置http转https @Bean public Connector httpConnector() { Connector connector = new Connector(TomcatEmbeddedServletContainerFactory.DEFAULT_PROTOCOL); connector.setScheme("http"); //Connector监听的http的端口号 connector.setPort(80); connector.setSecure(false); //监听到http的端口号后转向到的https的端口号 connector.setRedirectPort(443); return connector; } //这里设置默认端口为443,即https的,如果这里不设置,会https和http争夺80端口 @Override public void customize(ConfigurableEmbeddedServletContainer container) { container.setPort(443); } }
至此,我们的springboot就可以在阿里云上运行了,同时支持http和https的访问
视频讲解:https://edu.csdn.net/course/detail/23443
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
快递鸟/菜鸟电子面单接口的申请方法
电子面单是一种通过热敏纸打印输出纸质物流面单的物流服务。通过热感应显示文字,打印速度比传统针式打印速度提升4~6倍。电子面单以接口形式嵌入到自己的系统、网站上,可以在自己的平台操作打印电子面单。 一.电子面单接口类型及定义 快递电子面单接口:快递公司自己开发的电子面单服务, 商家使用必须快递公司上门做系统对接,使用一家快递则需要对接一次,比较麻烦,而且后期对接成本也较高。 2.菜鸟电子面单接口:可一次对接15家快递公司, 无需和每一家快递公司做对接。支持快递有四通一达、EMS、宅急送、德邦、优速、天天、快捷、全峰等15家常用快递公司,其中不包括顺丰。 菜鸟电子面单,是由菜鸟网络和快递公司联合向商家提供的一种通过热敏纸打印输出纸质物流面单的物流服务。 商家可在淘宝天猫的卖家中心申请开通服务,菜鸟会把服务申请流转给快递公司,快递公司审核通过后会给商家提供电子面单热敏打印纸;商家再通过发货软件与菜鸟网络系统交互并获得菜鸟生成的面单号(快递面单号段由快递公司提供)等打印信息,并通过热敏打印机(打印机由商家自行购买或与网点协商解决)完成电子面单打印并交付快递公司揽收派送。 3.快递鸟电子面单接口...
- 下一篇
3年java开发竟然还不知道Lambda的这个坑
背景 有朋友反馈zk连接很慢。整理出zk连接的关键逻辑如下: 上面的代码造成第一次调用ClientZkAgent.getInstance的时候,需耗时10s, 这个时间恰好跟semaphore的超时时间相当. 在此期间,整个世界好像停滞了一样。 分析 在本地重现后,通过jstack获得系统停滞期间的线程栈,发现这个时候zookeeper的EventThread有个比较奇怪的现象: 客户端实际上很快就连上了zookeeper并返回后生成了SyncConnected事件,而且EventThread已经在回调Watcher.process方法了,但似乎事件线程就一直hold在上面#_1的位置无法往下走, 同时,lambda表达式变成了ClientZkAgent的一个方法了:lambda$connect$0。了解了一下Java中lambda的实现方式,事情水落石出了。 简而言之,jvm会把lambda表达式转换成所在类的一个方法lambda${method}${seq}(method为该lambda所在的方法名,例如上面的connect方法),同时通过动态代理生成一个代理类(该代理类实现了la...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Mario游戏-低调大师作品
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS6,CentOS7官方镜像安装Oracle11G
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装