小程序後端項目【Springboot框架】部署到阿里雲服務器【支持https訪問】

前言:java

  個人後端項目是Java寫的,用的Springboot框架。在部署服務器並配置https訪問過程當中,由於作了一些使人窒息的操做(過後發現),因此總是不能成功。web

  不成功具體點說就是:域名地址能夠正常訪問(http/https都可),而部署在服務器上的API仍然只能經過http訪問,經過https訪問會顯示不安全鏈接!spring

  經過提交工單,獲得阿里雲工做人員的幫助,他們給出了答案:shell

    

  而後我想,我好像知道是咋回事了呢。apache

  1. Springboot框架是內嵌有tomcat的!!我只是把項目打成Jar包放到了我配置在服務器上的tomcat的webapps下,而後手動經過命令來運行程序。因此我用的仍是內嵌的tomcat。後端

  2. 我從阿里雲上下載的SSL證書直接配置在服務器的tomcat上,因此它天然而然就跟我寫的接口沒啥關係了。瀏覽器

問題解決:

  先思考一個問題:到底準備用Springboot內嵌的tomcat仍是用服務器上的外部tomcat?tomcat

  因此我無外乎兩條路走:安全

    1. 內嵌tomcat:在Springboot項目中直接配置SSL證書,使其能夠經過https被訪問;項目依然以Jar形式在服務器被運行。springboot

    2. 外部tomcat:剔除Springboot項目中的內嵌tomcat,修改項目相關配置,將其打成War包放到服務器的tomcat下加載運行。

實踐:

  前提:

  1. 不管哪一種方式,都須要先在服務器上下載安裝好Java環境哦(⊙o⊙);
  2. 準備好SSL證書!阿里雲買域名就送了免費的證書,下載tomcat對應的證書文件!

  方式一:使用內嵌tomcat部署程序 -- Jar包方式運行

    參考文章:部署到阿里雲,配置https,springboot項目同時支持http和https請求,阿里雲配置https

1. 將在阿里雲下載好的SSL證書文件(.pfx格式)和密碼文件,先放到src/main/resource文件夾下,再在項目下application.properties文件中配置證書信息。

 

2. 在Springboot啓動程序中修改增長一些信息,以下:

 1 import org.apache.catalina.Context;
 2 import org.apache.catalina.connector.Connector;
 3 import org.apache.coyote.http11.Http11NioProtocol;
 4 import org.apache.tomcat.jni.File;
 5 import org.apache.tomcat.util.descriptor.web.SecurityCollection;
 6 import org.apache.tomcat.util.descriptor.web.SecurityConstraint;
 7 import org.springframework.boot.SpringApplication;
 8 import org.springframework.boot.autoconfigure.SpringBootApplication;
 9 import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer;
10 import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;
11 import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory;
12 import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
13 import org.springframework.context.annotation.Bean;
14 import org.springframework.core.io.ClassPathResource;
15 
16 @SpringBootApplication
17 public class HappyseatApplication implements EmbeddedServletContainerCustomizer {
18 
19     public static void main(String[] args) {
20         SpringApplication.run(HappyseatApplication.class, args);
21     }
22 
23     // 根據spring boot 1.5.X如下版本,添加這個!注意,版本不一樣添加的不同↓↓↓↓
24     @Bean
25     //攔截全部請求
26     public EmbeddedServletContainerFactory servletContainer() {
27         TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
28         tomcat.addAdditionalTomcatConnectors(httpConnector()); // 添加http
29         return tomcat;
30     }
31     // 根據spring boot 1.5.X如下版本,添加這個!注意,版本不一樣添加此方法有所不一樣 ↑↑↑↑
32     
33     //配置http轉https
34     @Bean
35     public Connector httpConnector() {
36         Connector connector = new Connector(TomcatEmbeddedServletContainerFactory.DEFAULT_PROTOCOL);
37         connector.setScheme("http");
38         //Connector監聽的http的端口號
39         connector.setPort(80);
40         connector.setSecure(false);
41         //監聽到http的端口號後轉向到的https的端口號
42         connector.setRedirectPort(443);
43         return connector;
44     }
45 
46     //這裏設置默認端口爲443,即https的,若是這裏不設置,會https和http爭奪80端口
47     @Override
48     public void customize(ConfigurableEmbeddedServletContainer container) {
49         container.setPort(443);
50     }
51 
52     
53 }

     

    3. 直接用 eclipse生成Jar包😀

      

      

   

    4. 上傳服務器:將Jar包和證書文件傳到新建的/home/myapp目錄下,如圖:(ps:使用rz工具包能夠傳本地文件到服務器上,但須要在本地的遠程鏈接工具中使用纔可行)

     

    

    5. 啓動程序!使用命令 nohup java -jar happyseat.jar >runlog.txt 2>&1 & 啓動程序,加上nohup是爲了讓程序在shell窗口關閉後依舊運行在後臺。

    

    

    6. 使用命令 netstat -atunlp 查看有關接口狀況:發現剛剛啓動的程序中止了,而443端口在運行的進程也不是剛剛啓動獲得的進程號。

    

   

    7. 查看日誌也能夠發現是說443端口已經被佔用了,因此我就直接 kill 1907 ,再從新啓動了個人程序。正常加載運行了~

     

    

     8. 接下來在瀏覽器中測試 https + 域名 + /hello,發現成功啦!

      

    

    9. 不過我很憂桑地發現,訪問域名不能正常加載以前的頁面了。。。由於以前的域名對應的網站是WordPress裏的網站信息,我試着登網站也登不上了。

   而後我嘗試把我本身程序的端口改了,443端口也沒有被佔用,但是仍是不行orz...tomcat日誌裏仍是Address already in use.多是配置文件出毛病了,回頭再試試吧。。

    

 

後續:修改了訪問接口的端口號,在項目文件中,第二步的配置信息都刪了(( ╯□╰ ))。而後重啓服務器後Wordpress站點和接口均可以了。

  我特地看了一下端口對應的進程狀況,正常的時候443端口和80端口是有httpd服務在運行,因此仍是建議換端口哦(⊙o⊙)。

方式二:用服務器上安裝的外部tomcat自動加載程序包--War包加載運行

   (大前提:服務器上安裝了項目對應的tomcat版本喏!

    按照網上不少方案試過,暫時還沒成功,成功了更。。

    更:指明路👉部署springboot項目到雲服務器的兩種方式(jar+war)

相關文章
相關標籤/搜索