一台服务器架设多个 nodejs 网站的拓扑结构
搭建 Nodejs 生产环境
- 下载 nodejs 二进制代码包,然后减压到 /usr/local/nodejs
- 配置环境变量
- vi /etc/profile
- 最后面添加:
- export NODE_HOME=/usr/local/nodejs/bin
- export PATH=PATH
- :wq 保存,然后运行: source /etc/profile
nodejs 进程管理器 pm2 的使用
PM2 是一款非常优秀的 Node 进程管理工具,它有着丰富的特性:能够充分利用多核 CPU
且能够负载均衡、能够帮助应用在崩溃后、指定时间(cluster model)和超出最大内存限制
等情况下实现自动重启。
PM2 是开源的基于 Nodejs 的进程管理器,包括守护进程,监控,日志的一整套完整的功能
PM2 的主要特性
- 内建负载均衡(使用 Node cluster 集群模块)
- 后台运行
- 0 秒停机重载,我理解大概意思是维护升级的时候不需要停机.
- 具有 Ubuntu 和 CentOS 的启动脚本
- 停止不稳定的进程(避免无限循环)
- 控制台检测
PM2常见命令
- pm2 的安装
npm install pm2 -g
- 运行 pm2 的程序并指定 name
pm2 start app.js --name www_itying_com
pm2 start app.js -i 3 --name www_itying_com 3 启动 3 个进程 (自带负载均衡)
- 显示所有进程状态
pm2 list
- 显示所有日志
pm2 logs
- 显示一个进程的日志
pm2 logs www_itying_com
- 关闭重启所有进程
- pm2 stop all # 停止所有进程
- pm2 restart all # 重启所有进程
- pm2 reload all # 0 秒停机重载进程 (用于 NETWORKED 进程)
- 关闭重启指定进程
- pm2 stop 0 # 停止指定的进程
- pm2 restart 0 # 重启指定的进程
- pm2 stop www_itying_com
- pm2 restart www_itying_com
- 杀死进程
- pm2 delete 0 # 杀死指定的进程
- pm2 delete all # 杀死全部进程
- pm2 delete www_itying_com # 杀死指定名字的进程
- 显示相应进程/应用的总体信息
pm2 show www_itying_com
相关防火墙配置
- 添加:
firewall-cmd --zone=public --add-port=80/tcp --permanent - 重新载入:
firewall-cmd --reload - 查看
查看所有打开的端口: firewall-cmd --zone=public --list-ports - 删除
firewall-cmd --zone= public --remove-port=3306/tcp --permanent
Nginx 的安装
- 安装 nginx 源
- sudo rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
- 查看 Nginx 源是否配置成功
- 通过 yum search nginx 看看是否已经添加源成功。如果成功则执行下列命令安装 Nginx。
或者 npm info nginx 也可以看看 nginx 源是否添加成功
- 安装 Nginx
- sudo yum install -y nginx 3、启动 Nginx 并设置开机自动运行
- sudo systemctl start nginx
- sudo systemctl enable nginx
Nginx 反向代理配置
- 关闭 Selinux
- vi etc/selinux/config
- 修改 SELINUX=enforcing 为 SELINUX=disabled
- 必须重启 linux init 6
- 配置 firewalld 开启 80 端口
- firewall-cmd --zone=public --list-ports
- firewall-cmd --zone=public --add-port=80/tcp --permanent
- 配置反向代理
-
找到 /etc/nginx/conf.d 然后在里面新建对应网站的配置文件
-
server {
listen 80;
server_name www.bbb.com;
location / {
#设置主机头和客户端真实地址,以便服务器获取客户端真实 IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#禁用缓存
proxy_buffering off;
#反向代理的地址
proxy_pass http://127.0.0.1:3001;
}
- 重启 nginx
- systemctl restart nginx
- nginx -t 看配置是否正确
- systemctl stop nginx
- systemctl start nginx
域名测试
找到 C:\Windows\System32\drivers\etc\hosts
- 192.168.1.128
- 192.168.1.128 www.bbb.com
浏览器输入www.aaa.com nginx 转发到了 127.0.0.1:3001
Nginx 负载均衡
- 准备工作:1、关闭 Selinux 2、开启防火墙对应端口
- 负载均衡的种类:
- 一种是通过硬件来进行解决,常见的硬件有 NetScaler、F5、Radware 和 Array 等商用的
负载均衡器,但是它们是比较昂贵的 - 一种是通过软件来进行解决的,常见的软件有 LVS、Nginx、apache 等,它们是基于 Linux
系统并且开源的负载均衡策略. Nginx 的特点是占有内存少,并发能力强,事实上 nginx 的并发能力确实在同类型的网页服务器中表现最好,中国大陆使用 nginx 网站用户有:新浪、网易、 腾讯等。
- 一种是通过硬件来进行解决,常见的硬件有 NetScaler、F5、Radware 和 Array 等商用的
- nginx 的 upstream 目前支持 3 种方式的分配:
- 轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,
能自动剔除。 - weight 权重 ——you can you up
指定轮询几率,weight 和访问比率成正比,用于后端服务器性能不均的情况。 - ip_hash ip 哈希算法
每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,
可以解决 session 的问题。
- 轮询(默认)
- 配置负载均衡
找到 /etc/nginx/conf.d 然后在里面新建对应网站的配置文件
upstream bakebbs {
ip_hash;
server 127.0.0.1:3001 weight=1 ;
server 127.0.0.1:3001 weight=3;
}
server {
listen 80;
server_name www.bbb.com;
location / {
#设置主机头和客户端真实地址,以便服务器获取客户端真实 IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#禁用缓存
proxy_buffering off;
#反向代理的地址
proxy_pass http://bakebbs;
}
}
- 重启 nginx
- systemctl restart nginx
- nginx -t 看配置是否正确
- systemctl stop nginx
- systemctl start nginx
相关防火墙配置
- 添加:
firewall-cmd --zone=public --add-port=80/tcp --permanent - 重新载入:
firewall-cmd --reload - 查看
查看所有打开的端口: firewall-cmd --zone=public --list-ports - 删除
firewall-cmd --zone= public --remove-port=3306/tcp --permanent
HTTPS
- HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的 HTTP
通道,简单讲是 HTTP 的安全版。 - HTTPS 是在 HTTP 的基础上添加了安全层,从原来的明文传输变成密文传输,当然加密与解
密是需要一些时间代价与开销的,不完全统计有 10 倍的差异。在当下的网络环境下可以忽
略不计,已经成为一种必然趋势。 - 目前微信小程序请求 Api 必须用 https、Ios 请求 api 接口必须用 https
配置 https
- 证书类型
- 域名型 https 证书(DVSSL):信任等级一般,只需验证网站的真实性便可颁发证书保护网站;
- 企业型 https 证书(OVSSL):信任等级强,须要验证企业的身份,审核严格,安全性更高;
- 增强型 https 证书(EVSSL):信任等级最高,一般用于银行证券等金融机构,审核严格,安全性最高,同时可以激活绿色网址栏
-
创建证书
- 证书验证
可以是域名验证,也可以是文件验证
- 配置 web 服务器
https://cloud.tencent.com/document/product/4004143#2.-nginx-.E8.AF.81.E4.B9.A6.E9.83. A8.E7.BD.B2
将域名 www.domain.com 的证书文件 1_www.domain.com_bundle.crt 、私钥文
件 2_www.domain.com.key 保存到同一个目录,例如 /usr/local/nginx/conf 目录下。
更新 Nginx 根目录下 conf/nginx.conf 文件如下:
server {
listen 443;
server_name www.domain.com; #填写绑定证书的域名
ssl on;
ssl_certificate 1_www.domain.com_bundle.crt;
ssl_certificate_key 2_www.domain.com.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 / {
root html; #站点目录
index index.html index.htm;
}
配置完成后,先用 bin/nginx –t 来测试下配置是否有误,正确无误的话,重启 nginx。就可以使用 https://www.domain.com 来访问。