最近,由于项目需要,自己申请了一台亚马逊用于部署网站测试,在使用期间,发现网上没有一篇非常完整的文章讲解从服务器申请到域名解析,SSL证书申请的整个流程。所以自己总结一下,以供大家学习!

一、亚马逊EC2申请

为什么选择申请亚马逊的服务器?只是因为项目需要而已,我本意是想申请阿里云的的服务器的(毕竟是阿里的员工),并且亚马逊提供一年的免费EC2服务器。

打开地址:https://aws.amazon.com/cn/ec2/?hp=tile&so-exp=below

点击“免费试用Amazon EC2”

之后会跳转到登录页面,自己注册一个账号即可,注册需要使用信用卡号。注册之后进入EC2 Dashboard,

点击“启动实例”按钮

勾选“仅免费套餐”

然后选择合适你自己的服务器,我选择的是Ubuntu Server 18.04 LTS (HVM), SSD Volume Type ,

进入选择实例类型界面

全部使用默认的选择,直接点击“审核和启动”按钮

进入到核查实例启动的页面:

按照上图步骤操作后,

点击“启动实例”按钮

点击“查看实例”,进入实例面板,这里可以查看服务器的静态IP,这个IP就是外网可访问地址

现在如果尝试ping这个ip会发现超时

如果要想可以正常ping IP,需要打开ICMP的入站规则

选择网络与安全-安全组,选中你的实例(launch-wizard-xxx),选中入站,点击“编辑按钮”

然后添加如下一条:

再次在自己的电脑终端中ping IP:

到目前为止,AWS EC2的一条免费的测试服务器就申请好啦。

还有一点切记,如果你不想付费,在免费到期前,一定要终止服务器,不然,会扣你信用卡中的美金的!

二、终端连接AWS EC2+SecueCRT连接

将上面申请到的ssh密钥copy到文件夹.ssh下,在终端输入命令

ssh -i“webserver.pem”ubuntu@ec2-xxx-xxx-xxx-xxx.ap-south-1.compute.amazonaws.com
webserver.pem: ssh密钥
ubuntu: ec2服务器用户名
ubuntu@ec2-xxx-xxx-xxx-xxx.ap-south-1.compute.amazonaws.com:ec2服务器共有DNS(IPv4)
登录成功后如下图:

有些同学觉得直接使用终端不是很方便,有些功能,比如rz这种上传文件命令也用不了,那么推荐使用SecureCRT,链接方式如下:

Hostname:对应EC2 公有DNS(IPv4)
Port:22
Username:ubuntu
PublicKey:选择EC2配置中生成的ssh密钥

当这些都完成后,你发现可能登录不成功,这个就是22的端口没有开,

在 网络与安全-安全组,入站规则中添加如下规则:

之后,就可以在SecureCRT中登录服务器啦。

三、nginx+node环境搭建

在服务器申请成功后,就要开始搭建node环境了。

1. 开始前的准备

获取root权限,这样可以避免一些文件的创建,写入的权限问题

先获取系统更新, 并且安装curl工具

sudo apt-get update
sudo apt-get install curl

2. 安装node.js

我们一般不建议使用apt-get node来安装node.js,因为直接安装会安装最新版的,也许会和开发环境的不一致,照成一些兼容问题。

这里推荐一个管理不同版本node.js的工具:nvm,官网: https://github.com/creationix/nvm ;

使用curl安装nvm

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash

安装完nvm后,就可以通过nvm来指定安装node.js版本了

# 列出可以安装的node版本号
nvm ls-remote # 安装指定版本的node (当前最新版本为v10.11.0, LTS版是v8.12.0)
nvm install v8.10.0

然后通过node -v可以查看当前版本号

现在node服务就安装好啦,我们用最简单的代码来测试node是否可用, 创建一个test.js文件

mkdir demo
cd demo
touch test.js
sudo vi test.js

将一下代码复制到test.js文件中:

const http = require('http');
const hostname = '127.0.0.1';
const port = 3000; const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World\n');
}); server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});

保存文件并退出:

# 保存文件并退出
:wq

启动node服务器:

当前服务器访问地址

但是我们在浏览器通过AWS EC2服务器的共有IP并不能访问成功,当我们在入站规则中开放3000端口后,就可以访问成功

3. 安装nginx

但是我们通常访问网站是直接域名访问,也就是外部只请求80端口。那么这里,我们就需要通过反向代理来实现多端口的分发工作。

安装nginx,并查看版本号

sudo apt-get install nginx
nginx -v

进入nginx配置目录(/etc/nginx),查看文件

通过公有IP访问,页面返回如下信息:

这说明,我们的nginx服务安装成功,并且已经成功启动,现在来给http://127.0.0.1:3000做一个代理

在/etc/nginx中添加nginx配置

cd conf.d
touch test.conf
sudo vi test.conf

复制一下代码到test.conf中,保存退出文件,

server {
listen ;
server_name xxx.xxx.xxx.xxx; #当前使用ip访问,所有直接配置共有IP
location / {
proxy_pass https://127.0.0.1:; # 被代理的服务器的域名
}
} 

在目录 /etc/nginx中执行以下命令

# 检测配置是否正确
nginx -t
# 重启服务器
nginx -s reload

执行结果如下:

浏览器通过公网IP访问,页面正常返回

四、阿里云域名申请

上面可以通过IP访问网站已经成功,但是IP不是一个实用易记的地址,现在就需要通过申请域名来绑定当前服务器IP,

在阿里云上申请一个域名: https://wanwang.aliyun.com/domain

搜索注册一个你想要的域名,付款后,进入域名列表,选中你刚买的域名,点击“解析”

在解析设置中,点击添加记录,在记录值中填写AWS EC2的共有IP,点击“确定”。

现在我们在浏览器中输入域名,我们就会看到“welcome to nginx”的页面,这个说明域名已经解析成功。

之后修改nginx配置,将域名绑定到端口为3000的站点上即可

server {
listen ;
server_name www.yourdomain.com; # 这里改成你的域名
location / {
proxy_pass https://127.0.0.1:;
}
}  

现在通过浏览器访问,你就可以看到熟悉的hello world页面啦。

五、FreeSSL证书申请和nginx配置

1.申请FreeSSL证书

到现在我们当然还是不能满足,为了网站的访问安全,并且现在各种搜索引擎对https协议都开始采用优先排名,因此申请SSL是必要的。

现在有一些机构提供一些免费的SSL证书供大家使用,推荐FreeSSL.org:https://freessl.org/

如果只是用于测试,免费证书完全可以满足我们的要求,输入你的域名,选择一个品牌,点击“创建免费的SSL证书”

之后选择证书类型,验证类型,点击“点击创建”

之后会生成DNS验证记录:

进入阿里云的域名管理,在解析设置中点击“添加记录”

在弹窗中添加freessl中的dns验证信息,点击“确认”按钮。

之后,回到FreeSSL.org的验证界面,点击“点击验证”按钮

验证成功后,会生成CA证书,证书文件,证书密钥

注意,这里点击“证书下载”,下载的文件必须保存好,不要丢失了

再次进入阿里云的域名列表,点击需要配置的域名,进入域名的基本信息页面,点击“免费开启SSL证书”

在申请证书的页面,点击右上角的“上传原有证书”按钮,打开弹窗,填写对应的 证书文件,证书密钥,点击上传

之后,点击“返回证书控制台”

点击“我的证书”

你会看到刚添加的指纹

2. AWS EC2中添加https入站规则

先在入站规则中添加类型为https,端口为443,来源为任意位置的规则

3. 配置ssl证书到nginx

将前面下载的ssl证书上传到AWS EC2中, 我放的地址为:/etc/nginx/ssl/yourdomain.com/

修改nginx配置

server {
listen ;
server_name www.yourdomain.com;
return https://$host$request_uri;
}
server {
listen ;
server_name yourdomain.com;
return https://$host$request_uri;
} server {
listen ;
server_name www.yourdomain.com;
ssl on; location / {
proxy_pass http://127.0.0.1:;
} error_log /home/ubuntu/logs/nginx/www.yourdomain.com/error.log error;
access_log /home/ubuntu/logs/nginx/www.yourdomain.com/access.log; ssl_certificate /etc/nginx/ssl/yourdomain.com/full_chain.pem;
ssl_certificate_key /etc/nginx/ssl/yourdomain.com/private.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1. TLSv1.;
ssl_ciphers AESGCM:ALL:!DH:!EXPORT:!RC4:+HIGH:!MEDIUM:!LOW:!aNULL:!eNULL;
ssl_prefer_server_ciphers on;
}

保存退出配置文件,重启nginx服务器,这时再通过域名访问,就会看到安全的状态

点击安全,可以查看证书:

ok, 到此,一个基本的node网站部署就完成了。

参考资料:
https://blog.csdn.net/jjihuang/article/details/80777306
https://www.cnblogs.com/fengff/p/8892590.html

亚马逊EC2服务器申请+NODE服务器部署+阿里云域名申请+SSL证书使用的更多相关文章

  1. 阿里云域名的ssl证书申请与腾讯服务器域名的证书安装

    阿里云域名中的SSL证书申请,腾讯云服务器中的证书安装: 因为公司的与域名都在阿里云上面,服务器却用的是腾讯云的.记得前2年用阿里云管理平台的时候,域名的SSL证书都很好找,也许是长时间不用,找SSL ...

  2. 亚马逊EC2

    亚马逊EC2编辑 本词条缺少信息栏,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 亚马逊弹性计算云(EC2,Elastic Compute Cloud)是一个让使用者可以租用云端电脑运行所需 ...

  3. 亚马逊EC2服务器登录方法

    1.根据官网提供的方法登录连接到EC2服务器(官网推荐windows用户使用PUTTY连接) 2. 创建root的密码,输入如下命令: sudo passwd root 3.然后会提示你输入new p ...

  4. 亚马逊EC2构建代理服务器心血历程

    1.亚马逊上申请一台免费的EC2服务器,有相应的教程,绑定信用卡,预支付1美元,据说可以退回(防止到期后直接扣款,支付后通过修改卡信息,但好象有提示了,说卡不对了,也不管它了,到期后再说,美国人也不是 ...

  5. 亚马逊EC2弹性IP收费

    刚收到亚马逊云账单,被扣了4.44刀,吓尿,麻溜的去查账单详情,发现之前弃用的美国实例有个弹性IP没释放掉,占着茅坑还不拉屎,被扣钱宝宝无话可说,赶紧释放... $0.005 per Elastic ...

  6. sdm 使用阿里云域名申请 Let’s Encrypt 通配符 域名证书

    安装acme 进入 套件中心 点击安装 Git Server 之后进入SSh会使用git命令 方法1--------------------------------------- 获取代码 git c ...

  7. vue+express+mysql项目总结(node项目部署阿里云通用)

    原文发布于我的个人博客上:原文点这里   前面经历千辛万苦,终于把博客的所有东西都准备好了,现在就只等部署了.下面我介绍下我的部署过程: 一.购买服务器和域名   如果需要域名(不用域名通过ip也可以 ...

  8. 亚马逊ec2服务器上无法使用sudo执行npm命令的解决办法

    sudo ln -s /usr/local/bin/node /usr/bin/node sudo ln -s /usr/local/lib/node /usr/lib/node sudo ln -s ...

  9. 如何使用XShell登录亚马逊EC2云服务器

    http://jingyan.baidu.com/article/a3a3f811d5fc338da2eb8a00.html

随机推荐

  1. Netty 中 EventLoopGroup 的创建

    本文是基于 Netty 4.1.6.Final 的源码来分析的. 在分析源码之前做一些准备工作: 先熟悉一下 IDEA 的几个快捷键,能极大的提高我们查看源码的效率: Ctrl + Alt + B:用 ...

  2. 1. ReactJS基础(开发环境搭建)

    本文主要介绍通过React官方提供的create-react-app脚手架进行开发环境的搭建. 1.安装node环境(安装过程这里不做介绍,可参考其他博文) 在cmd中输入node -v 如果可以看到 ...

  3. ccf-命令行选项-201403-3

    分析: 这道题不是很难 用了一个split()函数 核心是: 对命令选项的判断 不要一个字符字符的判断 要一项一项的判断 比如ab:m: 分析步骤 (1) 读取一个字符(2)判断下一步是否有字符,下一 ...

  4. 锚点的animate使用过程中定位不准确的问题小记

    源码: $('html, body, .S').animate({ scrollTop: $('.a1').offset().top - 133}, { duration: 1500, easing: ...

  5. 简述rpm与yum命令的常见选项

    rpm是一个功能十分强大的软件包管理系统,它使得在Linux下安装.升级和删除软件包的工作变的容易.并且具有查询.验证软件包的功能. 1)安装选项 命令格式:rpm {-i|--install} [i ...

  6. PTA9

    这个作业属于哪个课程 C语言程序设计2 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/software-engineering-class2-2018/ ...

  7. hbase整合

    hbase與hive整合    1. hive中有數據 --> 創建hive管理表映射hbase    例如:        1)hive創建內部表            create tabl ...

  8. JavaScript 查找图中连接两点的所有路径算法

    1.把图看成以起点为根节点的树 2.使用深度遍历算法遍历路径 3.遍历到节点为目标节点时,保存这条路径 find2PointsPath(sourceId, targetId) { const { no ...

  9. Java_02变量、数据类型和运算符

    1.变量命名规则 变量必须以字母.下划线 " _ " 或 " $ " ( " ¥ " ) 符号开头. 变量可以包括数字,但不能以数字开头. ...

  10. 使用bind提供域名解析服务