从http到https

前言:

之所以会配置https,是因为近期刚好要替儿子配置小程序内嵌网页,里面需要域名为https协议。因此就顺便记录下来。

准备篇:

准备材料:

1. 准备好已经备案好的域名.
2. SSL证书
3. pm2和Nodejs以及nginx
4. CVM(云服务器)

安装插件篇:

  1. 首先,是安装所需要的各种插件:

Node:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 下面例子是V6.11的,喜欢的可以去查看其它版本NODE,方法一样的

sudo apt-get update
sudo wget https://mc.qcloudimg.com/static/archive/262420521a966befe17dfa0070ddb272/node-v6.11.0.tar.gz
sudo tar xvf node-v6.11.0.tar.gz
cd node-v6.11.0
sudo ./configure
sudo make
sudo make install
sudo cp /usr/local/bin/node /usr/sbin/

// 安装完了,可以检查下是否安装成功:
node -v
`

cnpm:

1
2
3
 npm install pm2 -g --registry=https://r.cnpmjs.org/

// 道理你也懂,除非你很有耐心地等,那你可以跳过这步,直接下一步:

pm2:

1
2
3
4
sudo apt-get install npm
sudo npm install -g pm2

pm2 -v

Nginx:

1
2
3
sudo apt-get install nginx -y

nginx -v

了解篇:

大体流程:

0. 到服务器里安装Nodejs、Npm、pm2、Nginx;
1. 到域名供应商进行域名和服务器备案,到阿里云/腾讯云购买免费SSL证书;

2. 到根目录创建一个文件夹,里面专门放置你这次的服务文件;
   比如app.js,和package.json,并写入对应监听代码;

3. 使用pm2启动node服务,并使用:CVM(云服务器)IP+端口号浏览器访问;

4. 配置nginx启动文件,并启动nginx,并使用CVM在浏览器直接访问,返回nginx样式页面;

5. 使用https://域名访问,能访问并浏览器出现https在地址栏,则代表配置成功!

好,回正题…

详细篇:

详细流程:
上面插件安装完后即可按部就班的配置工作了。

  1. 域名解析:
域名备案就跳过了;

1.1. 将域名解析到服务器:
测试是否解析成功了,直接ping 域名
如果返回带有CVM的IP,那么就证明成功解析了.

1.2. 申请ssl证书:

这里以申请腾讯云为例:
1. 到腾讯云官网,搜索: "SSL证书",进入一个购买页面直接购买即可.

2. 一开始选项是收费的,  选中"图01"中的红色方框后,即可看到0元了,点击"免费快速申请"了。

3. 然后进行一些列表单验证,等待审核通过即可使用了。

[图01]:

  1. 搭建HTTP服务:
a. 在服务器根目录创建一个data文件夹,
里面接着创建一个release文件夹,然后再是webapp.
(当然你也可以不这么干,只要保证是目录独立开就行.)

b. 同时创建起服务需要用的文件,app.js和package.json,是用来起Node服务的.

命令如下:

1
2
3
4
5
6
7
8
9

cd /
sudo mkdir /data/release/webapp
cd /data/release/webapp
sudo touch package.json
sudo touch app.js
// 修改文件权限:
sudo chmod a+r+w package.json
sudo chmod a+r+w app.js

package.json内容:

1
2
3
4
5
6
// package.json内容:

{
"name": "webapp",
"version": "1.0.0"
}

app.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

// 引用 express 来支持 HTTP Server 的实现
const express = require('express');

// 创建一个 express 实例
const app = express();

// 实现唯一的一个中间件,对于所有请求,都输出 "Response from express"
app.use((request, response, next) => {
response.write('Response from express');
response.end();
});

// 监听端口,等待连接
const port = 8765;
app.listen(port);

// 输出服务器启动日志
console.log(`Server listening at http://127.0.0.1:${port}`);

// 然后就是ctrl+s,保存起来,放到服务器对应上面的路径去.

  1. 运行 HTTP 服务:
a. 使用pm2启动node服务;

b. 到浏览器输入地址+端口号,查看远端启动的node服务;

具体命令:

1
2
3
4
5
6
7
8
9
10
11
12
// 启动node服务:
pm2 start app
// 你如果想查看刚启动的是什么,看看日志:
pm2 logs
// 如果你想重启下服务:
pm2 restart app 或者 all
// 如果你想停止pm2启动的node服务:
pm2 stop app 或停止所以pm2启动的服务: all

// 这时候你可以在浏览器访问:
http://CVM的IP+端口号
// 这个端口号就是app.js里定义好的.

  1. 预先搭建 HTTPS 服务架子:
a. 启动nginx;
1
2
// 启动nginx服务器:
sudo /etc/init.d/nginx start
  1. 配置HTTPS反向代理:
a. 下载SSL的证书配置并赋值到服务器,具体服务器供应商里可以找到;

b. 更改nginx里的ssl.conf文件配置;

c. 重启nginx服务;

d. 到浏览器nginx服务器;

具体步骤:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 1.
将SSL证书下载到电脑本地,会看到两个文件.
腾讯云下载的就2个文件,
一个是1_www.XXX.com_bundle.crt,
另一个是2_www.XXXS.com.key



将这两个文件上传到服务器的: /etc/nginx/里面;


// 2.
修改 /etc/nginx 目录的读写权限
sudo chmod a+rw /etc/nginx

// 3.
在 /etc/nginx/conf.d 目录创建 ssl.conf 文件:
cd /etc/nginx/conf.d
sudo touch ssl.conf
sudo chmod a+rw ssl.conf

ssl.conf 内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
server {
listen 443;
server_name www.XXX.com; # 改为绑定证书的域名
# ssl 配置
ssl on;
ssl_certificate 1_www.XXX.com_bundle.crt; # 改为自己申请得到的 crt 文件的名称
ssl_certificate_key 2_www.XXX.com.key; # 改为自己申请得到的 key 文件的名称
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;

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

// 记住,就改三个地方:
1. server_name
2. ssl_certificate
3. ssl_certificate_key

重启检查:

1
2
3
4
5
6
7
// 好了,配置工作完了,可以重新启动nginx服务了:
sudo nginx -s reload

// 如果把nginx给整个杀了,直接启动吧:
sudo /etc/init.d/nginx start

// 然后你就去浏览器,输入你的CMP的IP地址,直接访问,正常的话就能见到Nginx的样式页面.

  1. 到这,如果,我是说如果,如果你的配置成功了,那么你的域名是可以使用https访问的,但是记住:
比如你的域名是www.yuming.com,
那么你用https访问时,应该这么访问:
https://yuming.com

觉得我说的不对的欢迎扫描二维码来告诉我,十分感谢!!!


个人公众号二维码

Author: JawQ_
Link: http://wujiaqiang.com/2017/08/28/configHttps/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.
支付宝-打赏
微信-打赏