一臺服務器架設多個 nodejs 網(wǎng)站的拓撲結構

搭建 Nodejs 生產(chǎn)環(huán)境
- 下載 nodejs 二進制代碼包,然后減壓到 /usr/local/nodejs
- 配置環(huán)境變量
- vi /etc/profile
- 最后面添加:
- export NODE_HOME=/usr/local/nodejs/bin
- export PATH=
PATH
- :wq 保存,然后運行: source /etc/profile
nodejs 進程管理器 pm2 的使用
PM2 是一款非常優(yōu)秀的 Node 進程管理工具,它有著豐富的特性:能夠充分利用多核 CPU
且能夠負載均衡、能夠幫助應用在崩潰后、指定時間(cluster model)和超出最大內(nèi)存限制
等情況下實現(xiàn)自動重啟。
PM2 是開源的基于 Nodejs 的進程管理器,包括守護進程,監(jiān)控,日志的一整套完整的功能
PM2 的主要特性
- 內(nèi)建負載均衡(使用 Node cluster 集群模塊)
- 后臺運行
- 0 秒停機重載,我理解大概意思是維護升級的時候不需要停機.
- 具有 Ubuntu 和 CentOS 的啟動腳本
- 停止不穩(wěn)定的進程(避免無限循環(huán))
- 控制臺檢測
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 個進程 (自帶負載均衡)
- 顯示所有進程狀態(tài)
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 看看是否已經(jīng)添加源成功。如果成功則執(zhí)行下列命令安裝 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 然后在里面新建對應網(wǎng)站的配置文件
圖2.png
-
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 轉發(fā)到了 127.0.0.1:3001
Nginx 負載均衡
- 準備工作:1、關閉 Selinux 2、開啟防火墻對應端口
- 負載均衡的種類:
- 一種是通過硬件來進行解決,常見的硬件有 NetScaler、F5、Radware 和 Array 等商用的
負載均衡器,但是它們是比較昂貴的 - 一種是通過軟件來進行解決的,常見的軟件有 LVS、Nginx、apache 等,它們是基于 Linux
系統(tǒng)并且開源的負載均衡策略. Nginx 的特點是占有內(nèi)存少,并發(fā)能力強,事實上 nginx 的并發(fā)能力確實在同類型的網(wǎng)頁服務器中表現(xiàn)最好,中國大陸使用 nginx 網(wǎng)站用戶有:新浪、網(wǎng)易、 騰訊等。
- 一種是通過硬件來進行解決,常見的硬件有 NetScaler、F5、Radware 和 Array 等商用的
- nginx 的 upstream 目前支持 3 種方式的分配:
- 輪詢(默認)
每個請求按時間順序逐一分配到不同的后端服務器,如果后端服務器 down 掉,
能自動剔除。 - weight 權重 ——you can you up
指定輪詢幾率,weight 和訪問比率成正比,用于后端服務器性能不均的情況。 - ip_hash ip 哈希算法
每個請求按訪問 ip 的 hash 結果分配,這樣每個訪客固定訪問一個后端服務器,
可以解決 session 的問題。
- 輪詢(默認)
- 配置負載均衡
找到 /etc/nginx/conf.d 然后在里面新建對應網(wǎng)站的配置文件

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 的基礎上添加了安全層,從原來的明文傳輸變成密文傳輸,當然加密與解
密是需要一些時間代價與開銷的,不完全統(tǒng)計有 10 倍的差異。在當下的網(wǎng)絡環(huán)境下可以忽
略不計,已經(jīng)成為一種必然趨勢。 - 目前微信小程序請求 Api 必須用 https、Ios 請求 api 接口必須用 https
配置 https
- 證書類型
- 域名型 https 證書(DVSSL):信任等級一般,只需驗證網(wǎng)站的真實性便可頒發(fā)證書保護網(wǎng)站;
- 企業(yè)型 https 證書(OVSSL):信任等級強,須要驗證企業(yè)的身份,審核嚴格,安全性更高;
- 增強型 https 證書(EVSSL):信任等級最高,一般用于銀行證券等金融機構,審核嚴格,安全性最高,同時可以激活綠色網(wǎng)址欄
-
創(chuàng)建證書
圖1.png
- 證書驗證
可以是域名驗證,也可以是文件驗證
- 配置 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; #按照這個協(xié)議配置
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 來訪問。


