天天看點

伺服器向阿裡雲轉移之容器化1.0.2https跳轉

很早就開始用阿裡雲的伺服器了,當初阿裡雲的産品也還不全面,随着阿裡雲産品的成熟,也是時候把公司的伺服器做一次整改。期間學習了很多前輩的經驗,當然也有查不到資料,自己摸索的過的坑,希望記錄下來分享給遇到同樣坑的同學。

因為我們的合作夥伴要求我們的應用都必須使用SSL證書,是以我就要保證使用者都是在https下通路。那麼根據大部分人的習慣,直接打個域名,不加http,https之類的是再正常不過了,那麼我們就需要把所有通路http的使用者都轉到https下來。我們的code團隊為我的這個需求在tomcat上動了很多腦筋,最終是實作了,但不完美;據說還是要用nginx做比較好。

首先當然是先找現成的,就是在阿裡雲的SLB上找找

  1. 進入容器叢集的管理
    伺服器向阿裡雲轉移之容器化1.0.2https跳轉
  2. 在負載均衡頁面下前往SLB
    伺服器向阿裡雲轉移之容器化1.0.2https跳轉
  3. 在負載均衡的監聽頁面,可以看到後端端口為9080,那應該是docker排程的端口,我們不動他,在下面添加https的監聽,當然要選擇上預先配置好的證書
    伺服器向阿裡雲轉移之容器化1.0.2https跳轉
  4. 配置成功後,通路https://sn-test.ifengpai.com成功了,但通路http://sn-test.ifengpai.com也能成功,那說明我還隻成功了一半,難點還在後面
    伺服器向阿裡雲轉移之容器化1.0.2https跳轉
  5. 點選https監聽後面的更多,你會看到有個添加轉發政策的功能,進去添加政策,填寫了輸入框後,确定為灰色,又要建立虛拟伺服器組,這有點麻煩了有沒有?
    伺服器向阿裡雲轉移之容器化1.0.2https跳轉
  6. 熟話說外事問google,家事問baidu,軟體找docker;進入http://hub.docker.com裡随便找了下https,就發現很多redirecthttps,http-https之類的應用。拿出淘寶的精神,看download看star,最終選擇了jamessharp/docker-nginx-https-redirect,建立應用模闆如下:
    http2https:
      restart: always
      memswap_limit: 0
      ports:
        - "9999:80/tcp"    #我很不喜歡映射端口出來,但SLB特殊端口要求,隻能忍痛占個端口了,畢竟不能用9080,不然域名不知道通路哪個應用
      labels:
        aliyun.scale: '1'
        aliyun.lb.port_80: tcp://lb-bp15:80    #告訴SLB,使用者通路SLB的80時通路此docker的80端口,當然實作通路是這樣的user->80->9999-9999->80
      shm_size: 0
      image: 'jamessharp/docker-nginx-https-redirect:latest'
      memswap_reservation: 0
      kernel_memory: 0
      mem_limit: 0
               
  7. 應用建好了,下面要配置一下SLB,之前的tcp80->9080肯定是不能用了,又不能修改,隻好删除了再建
    伺服器向阿裡雲轉移之容器化1.0.2https跳轉
  8. SLB的前後端建好了,測試下效果http://sn-test.ifengpai.com, 立馬變成https://sn-test.ifengpai.com.
    伺服器向阿裡雲轉移之容器化1.0.2https跳轉

大家一定要注意了,整個過程中我并沒有設定任何的域名,也就是說,這是一個很通用的做法,如果你的SLB下有多個子域名,它也是會無條件的幫你跳轉到https下的!