从 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 上