nginx+nodejs 一台服务器站架多个网站

一、一台服务器架设多个 nodejs 网站的拓扑结构

二、搭建 Nodejs 生产环境

1、下载

下载 nodejs 二进制代码包或者,然后减压到 /usr/local/nodejs

2、配置环境变量

(1).vi /etc/profile

(2).最后面添加:

export NODE_HOME=/usr/local/nodejs/bin
export PATH=$NODE_HOME:$PATH

(3).:wq 保存,然后运行

source /etc/profile

三、nodejs 进程管理器 pm2 的使用

PM2 是一款非常优秀的 Node 进程管理工具,它有着 丰富的特性 能够充分利用多核CPU 能够负载均衡 、能够帮助应用在崩溃后、指定时间(cluster model) 和超出最大内存限制等情况下实现 自动重启 , PM2是开源的基于Nodejs 的进程管理器,包括 守护进程 监控 ,日志的一整套完整的功能

1.PM2 的主要特性

(1).内建负载均衡(使用 Node cluster 集群模块)
(2).后台运行
(3).0 秒停机重载,大概意思是 维护升级的时候不需要停机
(4).具有 Ubuntu CentOS 的启动脚本
(5).停止不稳定的进程(避免无限循环)
(6).控制台检测

2.PM2 的常见命令

(1).pm2 的安装

npm install pm2 -g # 命令行安装 pm2

 (2).运行pm2的程序并指定name

pm2 start app.js --name www_xxx_com
pm2 start app.js -i 3 --name www_xxx_com 3 启动 3 个进程 (自带负载均衡)

 (3).显示所有进程状态

pm2 list

(4).显示所有进程日志

pm2 logs

(5).显示一个进程的日志

pm2 logs www_xxx_com

(6).关闭重启所有进程

pm2 stop all # 停止所有进程
pm2 restart all # 重启所有进程
pm2 reload all # 0 秒停机重载进程 (用于 NETWORKED 进程)

(7).关闭重启指定进程

pm2 stop 0 # 停止指定的进程
pm2 restart 0 # 重启指定的进程
pm2 stop www_xxx_com
pm2 restart www_xxx_com

(8).杀死进程

pm2 delete 0 # 杀死指定的进程
pm2 delete all # 杀死全部进程
pm2 delete www_xxx_com # 杀死指定名字的进程

(9).显示相应进程/应用的总体信息

pm2 show www_xxx_com

三、相关防火墙配置

见【精选】CentOS8防火墙相关命令

 四Nginx 反向代理,负载均衡配置

见nginx配置详解-CSDN博客,为什么要用到Nginx来做负载均衡?为什么要做动静分离?,Nginx 反向代理与负载均衡详解

反向代理配置案例

找到nignx下对应的conf配置

server {listen 80; server_name www.xxx.com;location / {#设置主机头和客户端真实地址,以便服务器获取客户端真实 IPproxy_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;}
}

然后配置hosts:

        192.168.1.111 www.xxx.com  #自己的ip

然后浏览器输入www.xxx.com, 就会通过nginx转发到127.0.0.1:3001,这就是反向代理操作

Nginx 负载均衡

1.准备工作

(1).关闭 Selinux
(2).开启防火墙对应端口 

2.负载均衡的种类

(1).一种是通过硬件来进行解决,常见的硬件有 NetScaler F5 Radware Array 等商用的负载均衡器,但是它们是比较昂贵的
(2).一种是通过软件来进行解决的,常见的软件有 LVS Nginx apache , 它们是基于 Linux系统并且开源的负载均衡策略
Nginx 的特点 是占有内存少,并发能力强,事实上 nginx 的并发能力确实在同类型的网页服务器中表现最好

3.nginxupstream目前支持3种方式的分配 

(1).轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉, 能自动剔除
(2).weight权重:you can you up
指定轮询几率, weight 和访问比率成正比,用于后端服务器性能不均的情况
(3).ip_hash:ip哈希算法
每个请求按访问 ip hash 结果分配,这样每个访客固定访问一个后端服务器, 可以解决 session 的问题

4.配置负载均衡 

找到 /etc/nginx/conf.d 然后在里面新建对应网站的配置文件
upstream xxx{ip_hash; server 127.0.0.1:3001 weight=1; server 127.0.0.1:3001 weight=3;
}server {listen 80; server_name www.xxx.com;location / {#设置主机头和客户端真实地址,以便服务器获取客户端真实 IPproxy_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://xxx;}
}

 然后重启nignx就可以了

好了,在nginx中使用nodejs 以及搭建一台服务器站架多个网站就完成了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/113406.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hbase操作学习

1.namespace list_namespace 展示数据库 create_namespace 可以带属性名 属性值 create_namespace mydb,{author>hjp,ctime>2023-10-18}describe_namespace ‘库名’ 查看库的详细信息 alter_namespace ‘库名’ 修改表的详细信息 删除就是把method设置为unset dr…

识别准确率竟如此高,实时语音识别服务

前言 本文将介绍一个准确率非常高的语音识别框架,那就是FunASR,这个框架的模型训练数据超过几万个小时,经过测试,准确率非常高。本文将介绍如何启动WebSocket服务和Android调用这个服务来实时识别,一边说话一边出结果…

10. 机器学习-评测指标

Hi,你好。我是茶桁。 之前的课程中,我们学习了两个最重要的回归方法,一个线性回归,一个逻辑回归。也讲解了为什么学习机器学习要从逻辑回归和线性回归讲起。因为我们在解决问题的时候,有限选择简单的假设,越复杂的模型…

39 WEB漏洞-XXEXML之利用检测绕过全解

目录 涉及案例pikachu靶场xml数据传输测试-回显、玩法、协议、引入玩法-读文件玩法-内网探针或攻击内网应用(触发漏洞地址)玩法-RCE引入外部实体dtd无回显-读取文件协议-读文件(绕过)xxe-lab靶场登陆框xml数据传输测试-检测发现CTF-Jarvis-OJ-Web-XXE安全…

3dmax中导出模型到unity注意事项

从3dmax中导出 1. 注意单位,根据需要,选英寸还是选厘米 2. 不能导出有错误的骨骼,否则导入后模型网格里出现 Skinned Mesh Renderer ,对网格变换移动有影响,正常情况下都应该是 Mesh Renderer 3. 导出一般不带光源和…

使用VGG框架实现从二分类到多分类

一.数据集的准备 与之前的不同,这一次我们不使用开源数据集,而是自己来制作数据集。重点需要解决的问题是对数据进行预处理,如每一个图片的大小均不同,需要进行resize,还需要对每一张图片打标签等操作。 数据集文件 …

【C++代码】二叉搜索树的最近公共祖先,二叉搜索树中的插入操作,删除二叉搜索树中的节点--代码随想录

题目:二叉搜索树的最近公共祖先 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大&a…

YOLOv8改进实战 | 更换主干网络Backbone(三)之轻量化模型ShuffleNetV2

前言 轻量化网络设计是一种针对移动设备等资源受限环境的深度学习模型设计方法。下面是一些常见的轻量化网络设计方法: 网络剪枝:移除神经网络中冗余的连接和参数,以达到模型压缩和加速的目的。分组卷积:将卷积操作分解为若干个较小的卷积操作,并将它们分别作用于输入的不…

中文编程开发语言编程实际案例:程序控制灯电路以及桌球台球室用这个程序计时计费

中文编程开发语言编程实际案例:程序控制灯电路以及桌球台球室用这个程序计时计费 上图为:程序控制的硬件设备电路图 上图为:程序控制灯的开关软件截图,适用范围比如:台球厅桌球室的计时计费管理,计时的时候…

谈谈单例设计模式的源码应用和安全问题

一、源码应用 事实上,我们在JDK或者其他的通用框架中很少能看到标准的单例设计模式,这也就意味着他确实很经典,但严格的单例设计确实有它的问题和局限性,我们先看看在源码中的一些案例 1、jdk中的单例 jdk中有一个类的实现是一…

基因表达分析聚类分析

基因表达分析聚类&分析 1. Introduction to gene expression analysis Technology: microarrays vs. RNAseq. Resulting data matricesSupervised (Clustering) vs. unsupervised (classification) learning 微阵列技术: 制备DNA探针阵列并进行互补性杂交。 …

【深度学习-第4篇】使用MATLAB快速实现CNN多变量回归预测

上一篇我们讲了使用CNN进行分类的MATLAB代码。 这一篇我们讲CNN的多变量回归预测。 是的,同样是傻瓜式的快速实现。 一、什么是多变量回归预测 多变量回归预测则是指同时考虑多个输入特征进行回归预测。举几个例子: 房价预测:给定一组房…

索引背后的数据结构——B+树

为什么要使用B树? 可以进行数据查询的数据结构有二叉搜索树、哈希表等。对于前者来说,树的高度越高,进行查询比较的时候访问磁盘的次数就越多。而后者只有在数据等于key值的时候才能进行查询,不能进行模糊匹配。所以出现了B树来解…

【Excel】WPS单元格快速转换表格字母大小写

使用WPS Office打开表格,选择需要处理的单元格或单元格区域。 依次点击「会员专享」选项卡 —>「智能工具箱」。 再点击「格式」—>「大小写」,选择一种大小写转换方式即可。

ESP32网络开发实例-连接信号最强的热点

连接信号最强的热点 文章目录 连接信号最强的热点1、软件准备2、硬件准备3、代码实现在本文中,将向您展示如何使用 ESP32 WiFiMulti 库。 这使我们能够使用多个网络,ESP32 可以连接到列表中可用的最强 WiFi 网络。 每当它失去连接时,它都会重新连接到列表中下一个最强的网络…

SpringBoot项目创建失败或无法启动,启动报错时的常见问题及解决方案

1、无法启动,没有启动的三角按钮 原因:idea没有将其识别为一个maven项目 解决方案:告诉idea,这是一个maven项目 1.1、如果右侧有Maven项目,刷新一下 1.2、左侧项目鼠标右键,添加Maven框架支持 若没有选择m…

FGSM快速梯度符号法非定向攻击代码(PyTorch)

数据集:手写字体识别MNIST 模型:LeNet import torch.nn as nn import torch.nn.functional as F import torch from torchvision import datasets, transforms import matplotlib.pyplot as plt use_cuda True device torch.device("cuda"…

密码登录虽安全,但有时很麻烦!如何禁用或删除Windows 11中的密码登录

如果你想在Windows 11上自动登录,在本指南中,我们将向你展示如何删除你的帐户密码。 在Windows 11上,你可以至少通过三种方式从帐户中删除登录密码。在你的帐户上使用密码有助于保护你的计算机和文件免受来自internet或本地的未经授权的访问。然而,在某些情况下,密码可能…

【【萌新的FPGA学习之快速回顾 水 水 】】

萌新的FPGA学习之快速回顾 水 水 上一条FPGA的更新在9 25 并且2个礼拜没写 verilog 了 正好 刷新一下记忆 FPGA CPU DSP 的对比 在数字电路发展多年以来,出现了 CPU、DSP 和 FPGA 三种经典器件,每个都是具有划时代意义的器件。CPU、DSP 和 FPGA 都有各…

SQL INSERT INTO 语句(在表中插入)

SQL INSERT INTO 语句 INSERT INTO 语句用于向表中插入新的数据行。 SQL INSERT INTO 语法 INSERT INTO 语句可以用两种形式编写。  第一个表单没有指定要插入数据的列的名称,只提供要插入的值,即可添加一行新的数据: INSERT INTO table_n…