10分鐘免費開啓全站HTTPS

持續了1個多月的備案,今天收到短信終於下來了。css

上篇水文,大概的記錄了做爲前端利用gitlab.com利用gitlab-ci開啓CI自動部署。前端的gitlab的ci初嘗試。這篇文章就要開始記錄下我如何開啓https。html

https是什麼?

https 是什麼,不是本文的重點,直接跳過,https 的好處在這裏也不仔細講。前端

什麼是 Let’s Encrypt?

部署 https 網站的時候須要證書,證書由 CA 機構簽發,大部分傳統 CA 機構簽發證書是須要收費的,這不利於推進 https 協議的使用。Let’s Encrypt 也是一個 CA 機構,但這個 CA 機構是免費的!!!也就是說簽發證書不須要任何費用。python

什麼是全站https,也就是通配符證書?

域名通配符證書相似 DNS 解析的泛域名概念,通配符證書就是證書中能夠包含一個通配符。主域名簽發的通配符證書能夠在全部子域名中使用,好比 .example.com、bbs.example.com、bbs.example.com。
2018 年 3 月 14 日,Let’s Encrypt 對外宣佈 ACME v2 已正式支持通配符證書。這就意外味着用戶能夠在 Let’s Encrypt 上免費申請支持通配符的 SSL 證書。之前配置子域名也是須要每一個域名單獨的申請證書的,意思是如今能夠直接用*.example.com這個證書,讓全站實現https。nginx

下面本文就簡單的記錄了我開啓全站https的步驟,10分鐘就能搞定,首先從blog子域名開始。git

準備工做

1. 一個頂級域名:peiqixin.com  # 我這裏用的是
2. 一臺本身的雲服務器 # 我這裏用的是個人那個小水管,以前在騰訊雲擼的羊毛,6年360塊錢的服務器,我這裏服務器的系統用的是ubuntu

下面的全部操做都是在你的服務器上面,(個人服務器系統是ubuntu 16.04),其餘的系統的操做也差很少。web

添加一個blog域名解析

下載Nginx

安裝 nginx 。若是你已經安裝能夠跳過這步。ubuntu

sudo apt-get update
sudo apt-get install nginx

若是不會nginx的基本操做和基本配置,建議仍是先去了解一下 nginx 的基本配置,好比如何的開啓一個web服務器,nginx的基本操做和編寫配置(不是必須)。api

下載certbot客戶端

sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install python-certbot-nginx

安裝的時候一路 enter 就完事兒了。服務器

獲取 Let’s Encrypt certificate

cerbot 提供 nginx 配置以幫助咱們從新配置咱們之前的 nginx 配置,以便咱們可使用咱們即將得到的 SSL 證書。

## 個人域名是peiqixin.com。這裏要換成你要配置的域名
sudo certbot --server https://acme-v02.api.letsencrypt.org/directory --manual --preferred-challenges dns  --installer nginx -d *.peiqixin.com -d peiqixin.com

而後又是一路的肯定選擇肯定就能夠了。

可是請注意這一步,就暫時不要繼續enter了

請把這段token複製下來。
打開你的域名提供商,就是你以前買域名的地方。添加一個域名解析。

記錄選擇 選擇 TXT
主機記錄填入 _acme-challenge
記錄值就填入剛纔你保存下來的token

點擊保存以後,certbot客戶端會去肯定你是否在正確的添加了解析。

若是正確的添加了解析。
接下來

Which server blocks would you like to modify?
-------------------------------------------------------------------------------
1: File: /etc/nginx/sites-enabled/default
Addresses: [::]:80 default_server, 80 default_server
Names: _
HTTPS: No

...
-------------------------------------------------------------------------------
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel):

將呈現nginx配置中的服務器塊列表,供您選擇要將證書部署到的服務器塊。
反正我用不上,這裏選擇cancel,輸入c,enter繼續。

接下來

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
-------------------------------------------------------------------------------
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.

這一步就是讓你選擇是否將http流量重定向到建議的https。既然是全站https,全部的訪問都應該走https,選擇2,enter。提供與前一階段相同的列表,輸入c,按enter繼續。

接下來,當你看到下面的一段就代表你已經配置好了。

請把

/etc/letsencrypt/live/peiqixin.com/fullchain.pem
/etc/letsencrypt/live/peiqixin.com/privkey.pem

這2個地址記下來

配置nginx

sudo nginx -t

找到你的nginx配置文件的地址

sudo mkdir conf.d #建立一個配置nginx的目錄,不可能把全部的配置寫在一個文件裏面,之後也很差維護

再在nginx的默認配置文件nginx.conf的http模塊裏面添加

include /etc/nginx/conf.d/*.conf;  #引入全部的配置文件

在conf.d文件夾裏面建立一個index.conf,建立主配置文件負責監聽80端口並轉發請求。

server {
    listen 80;
    server_name peiqixin.com www.peiqixin.com blog.peiqixin.com;
    rewrite ^(.*) https://$host permanent;
}

建立https配置文件。建立各域名配置文件監聽443端口(能夠按域名分開,也能夠寫一個文件裏,我爲了方便寫在一個文件裏)

server {
        listen       443;
        server_name  peiqixin.com  www.peiqixin.com;

        ssl on;
        ssl_certificate      /etc/letsencrypt/live/peiqixin.com/fullchain.pem; ## 這個就是你配置certbot最後一步要你記錄下來的地址
        ssl_certificate_key  /etc/letsencrypt/live/peiqixin.com/privkey.pem;
        
        ssl_session_cache    shared:SSL:10m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        location / {
            root /home/ubuntu/blog;  ##這裏我用hexo博客生成器生成的靜態html,js,css都放在了這個文件
            index index.html index.htm;
        }
    }
 server {
        listen       443;
        server_name  blog.peiqixin.com;

        ssl on;
        ssl_certificate      /etc/letsencrypt/live/peiqixin.com/fullchain.pem;
        ssl_certificate_key  /etc/letsencrypt/live/peiqixin.com/privkey.pem;
        
        ssl_session_cache    shared:SSL:10m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        location / {
            root /home/ubuntu/blog;
            index index.html index.htm;
        }
    }

退出保存。檢測一下nginx的配置是否有語法錯誤

sudo nginx -t

重啓nginx

訪問blog.peiqixin.com,就會看見


再訪問peiqixin.com


都是自動的從http跳轉到https。

接下來想要添加一個api.peiqixin.com域名爲https。重複上面的第一步和最後一步,而後就能夠在api.peiqixin.com域名旁邊看到小綠鎖。

參考資料

  1. certbot官網
  2. how-to-deploy-wildcard-ssl-certificates-using-lets-encrypt
  3. Nginx 配置多域名 http轉https
相關文章
相關標籤/搜索