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


前言:

  我的后端項目是Java寫的,用的Springboot框架。在部署服務器並配置https訪問過程中,因為做了一些令人窒息的操作(事后發現),所以老是不能成功。

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

  通過提交工單,得到阿里雲工作人員的幫助,他們給出了答案:

    

  然后我想,我好像知道是咋回事了呢。

  1. Springboot框架是內嵌有tomcat的!!我只是把項目打成Jar包放到了我配置在服務器上的tomcat的webapps下,然后手動通過命令來運行程序。所以我用的還是內嵌的tomcat。

  2. 我從阿里雲上下載的SSL證書直接配置在服務器的tomcat上,所以它自然而然就跟我寫的接口沒啥關系了。

問題解決:

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

  所以我無外乎兩條路走:

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

    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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM