天天看點

我是如何使用docker安裝nginx并配置https服務的

作者:希留說

前言

嗨,大家好,我是希留,一個被迫緻力于全棧開發的老菜鳥。

因為最近新學習了個uni-app的項目。想要運作成小程式,但微信小程式的接口都是需要https請求才能通路到。這一下就難住了,該怎麼把我的接口服務配置成可以https通路呢?

我的域名是騰訊雲的域名,也已經備案好了的。正好可以申請免費的域名型(DV)SSL 證書,而且可以免費申請20個,夠我用了。

這篇文章就來介紹一下,我是怎麼使用docker安裝nginx并配置https服務的。

一、前期準備

1、備案好的域名

想要申請SSL正書,就需要有個備案好的域名(以騰訊雲為例)。想了解個人域名怎麼備案的可以移步這篇文章了解一下個人域名備案詳細流程(圖文并茂)

2、安裝nginx

為了圖友善,這裡是使用docker安裝nginx的。是以需要具備一些docker的基礎知識,相信會點開閱讀的朋友也是對docker有一定了解的,這裡就不啰嗦怎麼安裝docker了。

2.1 下載下傳nginx的docker鏡像

docker pull nginx
           

2.2 建立用于映射的目錄

了解docker的都知道,docker容器啟動後,容器内部有自己的檔案系統,配置檔案也在裡面。是以我們需要把配置檔案挂載到容器外部,也就是我們的linux伺服器上。

例如我是在根目錄下建立了如下目錄:

mkdir /mydata/nginx/html -p
mkdir /mydata/nginx/log -p
mkdir /mydata/nginx/cert -p
           

2.3 從容器中拷貝nginx配置

  • (1)先運作一次容器(為了拷貝配置檔案)。
docker run -p 80:80 --name xiliu-nginx \
-v /mydata/nginx/html:/usr/share/nginx/html \
-v /mydata/nginx/logs:/var/log/nginx  \
-d nginx
           
  • (2)将容器内的配置檔案拷貝到指定目錄。
docker container cp xiliu-nginx:/etc/nginx /mydata/nginx/
           
  • (3)進入 /mydata/nginx/ 目錄下,修改檔案名稱,把名稱改為 conf。
mv nginx conf
           
  • (4)終止并删除容器。
# 停止容器
docker stop xiliu-nginx
# 删除容器
docker rm xiliu-nginx
           

2.4 啟動 nginx

經過2.3的步驟後,我們在linux伺服器上就得到了nginx相關的配置檔案了,接下來隻需要挂載這些目錄。

這樣我們每次需要修改nginx的配置檔案的時候,隻要修改挂載到外部的檔案,容器内的檔案也會相應改變,能省很多功夫。強烈建議挂載!!!

docker run -p 80:80 -p 443:443 --name xiliu-yz-nginx \
-v /mydata/nginx/html:/usr/share/nginx/html \
-v /mydata/nginx/logs:/var/log/nginx  \
-v /mydata/nginx/conf:/etc/nginx \
-v /mydata/nginx/cert:/etc/nginx/cert \
-d nginx
           

啟動完成後, 輸入 docker ps 指令,可以看到正在運作的 docker 容器。當 nginx 啟動成功後,我們隻需要修改配置檔案,就可以實作多個域名和https通路的需求啦。

我是如何使用docker安裝nginx并配置https服務的

二、配置步驟

1、申請免費證書

進入騰訊雲的控制台,找到 SSL證書,點選進入,然後申請免費版證書。需要注意的是:(免費版的證書隻能是1個域名1個證書,不能通配。假如你是添加了多個子域名,則每個子域名都需要申請1個證書,騰訊雲最多支援免費申請20個證書。)

申請步驟如下圖所示:

我是如何使用docker安裝nginx并配置https服務的
我是如何使用docker安裝nginx并配置https服務的

2、下載下傳證書

因為是在Nginx裡面配置的,是以下載下傳 Nginx類型的證書

我是如何使用docker安裝nginx并配置https服務的
我是如何使用docker安裝nginx并配置https服務的

3、把證書上傳至伺服器

下載下傳到本地的證書壓縮包解壓後,把字尾名為 .key 和 .crt 的兩個檔案通過ftp等工具上傳至伺服器。

我是如何使用docker安裝nginx并配置https服務的

最好放在伺服器安裝nginx的目錄下,我的nginx是用docker安裝的,是以放在了映射的目錄裡。如下圖所示:

我是如何使用docker安裝nginx并配置https服務的

4、配置 .conf 檔案

證書上傳好之後,就可以配置 https 了。nginx的配置檔案這裡有必要說明一下(因為我的項目是前後端分離的項目,有多個域名。是以是拆分成了api.conf檔案和lms.conf檔案)

nginx.conf檔案隻做一個引入

我是如何使用docker安裝nginx并配置https服務的

真正的配置是在api.conf檔案和lms.conf檔案。

我是如何使用docker安裝nginx并配置https服務的

4.1 後端接口服務 api.conf 配置

  • 配置如下所示,需要注意的是證書的路徑:是nginx容器裡面的路徑,不是伺服器的映射目錄
server {
    listen 80;
    listen 443 ssl;    #表示監聽443端口即https
    server_name  api.xiliu.online; #域名
    ssl_certificate /etc/nginx/cert/api.xiliu.online_bundle.crt;   #證書檔案路徑
    ssl_certificate_key /etc/nginx/cert/api.xiliu.online.key;      #證書私鑰檔案路徑
    ssl_session_timeout 5m;                                         #5分鐘session會話保持
    #請按照以下協定配置
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;
    
    location / {
    	proxy_pass   http://xx.xx.xx.xx:xxxx; #接口服務的ip位址
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

}
           
  • 配置完成後,重新開機 nginx 容器,使用 https 通路接口位址,如下圖所示,可以成功通路。
我是如何使用docker安裝nginx并配置https服務的

4.2 前端項目 lms.conf 配置

  • 上面隻是配置的api接口服務的https,我們把前端項目也配置一下。因為我的前端項目有兩個子域名,是以需要配置兩個server ,具體配置如下所示:
server {
    listen 80;
    listen 443 ssl; #偵聽443端口,用于SSL
    server_name yzht.xiliu.online; #域名
    ssl_certificate /etc/nginx/cert/yzht.xiliu.online_bundle.crt;   #證書檔案路徑
    ssl_certificate_key /etc/nginx/cert/yzht.xiliu.online.key;      #證書私鑰檔案路徑
    ssl_session_timeout 5m;                                         #5分鐘session會話保持
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;

    location / {
        root   /usr/share/nginx/html; #代理目錄
        index  index.html index.htm;
        try_files $uri $uri/ /index.html;
    }
    location /prod-api { #反向代理
        rewrite ^.+prod-api/?(.*)$ /$1 break;
        proxy_pass https://api.xiliu.online;
            
   }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}
           
  • 配置完成後,重新開機 nginx 容器,使用 https 通路接口位址,可以成通路到頁面,也能成功調用api的接口。
我是如何使用docker安裝nginx并配置https服務的
我是如何使用docker安裝nginx并配置https服務的

總結

以上就是本文的全部内容了,感謝大家的閱讀。本文介紹了使用docker安裝nginx服務,并使用騰訊雲免費的SSL證書配置項目支援https通路。

如果覺得文章對你有幫助,還不忘幫忙點贊、收藏、關注、評論喲,您的支援就是我創作最大的動力!

繼續閱讀