從 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方便管理程式碼
克隆專案到伺服器
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上
原文地址