從 node服務部署,到https配置與nginx轉發

李諾發表於2019-01-19

從 node服務部署,到https配置與nginx轉發

最近在搞小程式,小程式的服務必須使用https協議,之前沒學過這些,於是寫下這篇部落格,記錄自己遇到的問題

本篇部落格解決這些問題,伺服器的登陸配置、專案的部署、https證書的申請、nginx部署https與轉發本地服務

通過私鑰登陸伺服器

  • 騰訊雲重灌系統
  • 登陸設定選擇使用ssh金鑰設定
  • 選擇ssh金鑰,如果沒有則建立ssh金鑰
  • 點選開始安裝
  • 下載生成好的私鑰到本地
  • 使用終端進行配置

    // 賦予私鑰檔案僅本人可讀許可權
    chmod 400 <下載的與雲伺服器關聯的私鑰的絕對路徑>
    
    // 執行以下遠端登入命令
    ssh -i <下載的與雲伺服器關聯的私鑰的絕對路徑> <username>@<hostname or ip address>

給伺服器裝nvm管理node版本

// 下載nvm
wget https://github.com/cnpm/nvm/archive/v0.23.0.tar.gz
// 解壓nvm
tar -xf v0.23.0.tar.gz
// 進入目錄
cd nvm-0.23.0/
// 安裝nvm
./install.sh
// 安裝後執行
source ~/.bash_profile

使用nvm安裝node

nvm install 10.14.2

給伺服器安裝git

由於我的程式碼託管在github上,給伺服器安裝git方便管理程式碼

在linux安裝git

克隆專案到伺服器

git clone https://github.com/lfhwnqe/wechat_server.git

進入專案根目錄安裝依賴

cd wechat_server
npm install

啟動專案進行連線

npm start

現在專案在本7001埠啟動

此時訪問伺服器公網ip:7001就可以訪問到伺服器上啟動的服務

把域名對映到伺服器

  • 進入域名管理介面(我用的是阿里的)
  • 點選解析設定
  • 點選修改
  • 在記錄值處修改為伺服器的公網ip
  • 儲存設定,然後訪問你的域名有服務監聽80埠的話就可以得到響應了

申請https證書

  • 先申請一個免費https證書
  • 在伺服器執行一下命令,通過openssl生成csr和私鑰

    openssl req -new -newkey rsa:2048 -sha256 -nodes -out linuoblog.cn.csr -keyout linuoblog.cn.key -subj "/C=CN/ST=ShenZhen/L=ShenZhen/O=NUO Inc./OU=Web Security/CN=linuoblog.cn"

    下面是上述命令相關欄位含義:

  • C:Country ,單位所在國家,為兩位數的國家縮寫,如: CN 就是中國
  • ST 欄位: State/Province ,單位所在州或省
  • L 欄位: Locality ,單位所在城市 / 或縣區
  • O 欄位: Organization ,此網站的單位名稱;
  • OU 欄位: Organization Unit,下屬部門名稱;也常常用於顯示其他證書相關資訊,如證書型別,證書產品名稱或身份驗證型別或驗證內容等;
  • CN 欄位: Common Name ,你的網站域名;
  • 如果你是使用https://freessl.cn獲取證書,在使用openssl命令生成 csr 檔案後,在頁面選擇csr生成,並貼上生成的csr內容到頁面,然後通過該網站的驗證方式,驗證所有者,即可獲得ca證書
  • https://freessl.cn獲得的ca證書是 .pem字尾的證書檔案,證書文獲取成功後,就可以在 Nginx 配置檔案裡配置 HTTPS 了。

配置nginx,域名啟用https,通過nginx把https請求轉發到本地node服務

要開啟 HTTPS 服務,在配置檔案資訊塊(server block),必須使用監聽命令 listen 的 ssl 引數和定義伺服器證書檔案和私鑰檔案,同時通過設定location模組把傳送到網頁的請求轉發到伺服器上的node服務,如下所示:

worker_processes auto;
http {
    #配置共享會話快取大小,視站點訪問情況設定
    ssl_session_cache   shared:SSL:10m;
    #配置會話超時時間
    ssl_session_timeout 10m;
    server {
        listen              443 ssl;
        server_name         linuoblog.cn;
        
        #設定長連線
        keepalive_timeout   70;
        
        #HSTS策略
        add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
        #證書檔案
        ssl_certificate     full_chain.pem;    # 證書的路徑
        #私鑰檔案
        ssl_certificate_key linuoblog.cn.key; # 私鑰的路徑
        
        location / {
        # 這裡是把連結代理到本機的7001埠
          proxy_pass http://127.0.0.1:7001;
        }
    }
}
        events {
            worker_connections  1024;  ## Default: 1024
          }

配置完成後啟動nginx

nginx

這個時候,訪問自己的域名就能看到https服務了。同時也通過nginx把網頁端的請求轉發到了伺服器本地的server上
原文地址

相關文章