天天看點

小程式:配置Https伺服器(Nginx)

小程式與普通移動端開發的一個很大的不同之處就在于小程式的ajax 請求是使用https 協定與伺服器端進行通信的。是以要開發小程式,首先要搭建https 伺服器。這篇文章記錄了在nginx 做轉發的伺服器中如何一步步完成https 配置。

1. http 和https

在開始行動之前,我們必須先搞清一個問題,http 和https 的差別是什麼?要配置https 需要執行哪些步驟的操作?關于http 和https 網上也是有大量的文章來讨論,也是面試時非常常見的一個問題,是以這裡就不細講。簡單來說,https 相對于http 的差別就在于https 是使用密文傳輸,而http 是使用明文傳輸的,這也是https 比http 更安全的原因。

既然是密文傳輸,那麼是用什麼進行加密的?加密操作是由伺服器主導的,那我們又憑什麼相信伺服器不是由壞人冒充的?這就是https 要解決的事情。具體細節可參考: https 原理詳解

看完以上加密細節操作可以得出一個階段性的結論,要完成https 的配置實際上就是在伺服器上安裝一個由CA(公信機構)頒發的證書和一對非對稱秘鑰(包含公鑰和私鑰)。于是在小程式應用中完成https 的配置流程可以概括為以下幾步:獲驗證書、在伺服器上安裝證書、小程式背景添加合法域名。

2. 開始行動

2.1 獲驗證書

一般伺服器提供商(比如說阿裡雲)都會提供證書服務,但是通常是需要花錢購買的。而通過FreeSSL 我們可以獲得免費的證書,具體操作流程如下:

  • 注冊并登入:https://freessl.org
小程式:配置Https伺服器(Nginx)
  • 輸入你的域名(域名需要已經備案,具體怎麼備案可以去伺服器提供商管理平台檢視),點選建立證書,會獲得以下結果:
小程式:配置Https伺服器(Nginx)
  • 登入域名管理網站(我的是阿裡雲),選擇域名與網站 -> 雲解析DNS -> 添加解析,并将上圖中的資訊填寫到相應的位置,然後點選确認。
小程式:配置Https伺服器(Nginx)
  • 幾分鐘後,在FreeSSL 頁面中點選驗證,驗證通過後可以下載下傳證書,下載下傳下來的證書中包含了CA 證書和對稱秘鑰(私鑰隻會在第一次被下載下傳下來,是以要做好備份!)

2.2 伺服器安裝證書

擷取到證書以後,我們再來到伺服器上進行安裝,所謂的安裝實際上就是将上一步中下載下傳下來的證書(包含兩個檔案,一個是.pem,一個是.key,.pem 中包含兩個證書)放在伺服器上的某一個位置,然後修改nginx 配置檔案使之以https 協定與用戶端進行通信。

  • 證書檔案放置位置可以選擇:/etc/nginx/certs,沒有這個位置的話可以建立
  • nginx 配置檔案主要修改如下(如果沒有自行修改的話,nginx 配置檔案位置為 /usr/local/nginx/conf/nginx.conf):
server {
    listen 80;
    # about ssl
    listen 443 ssl;
    ssl_certificate /etc/nginx/certs/full_chain.pem;
    ssl_certificate_key /etc/nginx/certs/private.key;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;

    # server name
    server_name  xxx.xxx.xxx;

    location / {
        proxy_pass http://127.0.0.1:3000;
    }
}
           

2.3 小程式背景配置合法域名

登入小程式背景,點選設定 -> 開發設定,添加你自己的域名為合法域名即可。

這裡要注意的一個問題是,微信公衆平台和小程式背景是不能綁定一個郵箱的,是以兩個平台如果都有賬号的話不要記混了。

3. 可能遇到的問題

3.1 問題一:the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/ng...

解決辦法:參考 https://www.cnblogs.com/ghjbk/p/6744131.html 安裝ssl_module 即可

3.2 問題二:"/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)

解決辦法:

// 使用nginx -c的參數指定nginx.conf檔案的位置
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
           

3.3 問題三:配置完成後無法通過https 通路頁面,并且在nginx access log 中接收不到通路記錄

解決辦法:記得阿裡雲開放443 端口啊!

繼續閱讀