10分鐘免費開啟全站https

小落發表於2018-05-25

title: 10分鐘開啟全站https date: 2018-05-25 16:03:31 tags:

  • https
  • ubuntu

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

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

什麼是https?

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

什麼是 Let’s Encrypt?

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

什麼是全站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。

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

開始配置

準備工作

1. 一個頂級域名:peiqixin.com  # 我這裡用的是
2. 一臺自己的雲伺服器 # 我這裡用的是我的那個小水管,之前在騰訊雲擼的羊毛,6年360塊錢的伺服器,我這裡伺服器的系統用的是ubuntu

複製程式碼

下面的所有操作都是在你的伺服器上面,(我的伺服器系統是ubuntu 16.04),其他的系統的操作也差不多。

新增一個blog域名解析

10分鐘免費開啟全站https

下載Nginx

安裝 nginx 。如果你已經安裝可以跳過這步。

sudo apt-get update
sudo apt-get install nginx
複製程式碼

如果不會nginx的基本操作和基本配置,建議還是先去了解一下 nginx 的基本配置,比如如何的開啟一個web伺服器,nginx的基本操作和編寫配置(不是必須)。

下載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了

10分鐘免費開啟全站https

請把這段token複製下來。 開啟你的域名提供商,就是你之前買域名的地方。新增一個域名解析。

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

10分鐘免費開啟全站https

點選儲存之後,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繼續。

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

10分鐘免費開啟全站https

請把

/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,就會看見

10分鐘免費開啟全站https
再訪問peiqixin.com

10分鐘免費開啟全站https
都是自動的從http跳轉到https。

接下來想要新增一個api.peiqixin.com域名為https。重複上面的第一步和最後一步,然後就可以在api.peiqixin.com域名旁邊看到小綠鎖。

更新證照

因為這個https證照是有3個月的期限的,差不多快到快要到3個月的時候,letsencrypt會發郵件給你,告訴你的證照快要過期。這個時候你就可以自己重新安排下證照了。 (你也可以寫個定時指令碼,但是那個不是本文的關注的地方,而且我也沒寫)

certbot renew
// 上面的指令我跑不成功,就換成下面的這條,等於說是重新的申請下證照,不用改配置,30秒就選擇完了
// sudo certbot --force-renew  

複製程式碼

參考資料

  1. certbot官網
  2. how-to-deploy-wildcard-ssl-certificates-using-lets-encrypt
  3. Nginx 配置多域名 http轉https

相關文章