- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我给了一个任务,在我的应用程序中使用 nginx 和 pm2。我应该如何在集群模式下使用 pm2 运行的 nodejs 应用程序前面使用 nginx?
还了解到pm2本身提供了内置的负载均衡器,那我为什么要用nginx呢?
最佳答案
这是一个老问题,但我最近不得不这样做,我觉得更完整的答案可能对任何像我一样从谷歌登陆的人都有帮助。我假设您使用 nginx 作为多台服务器的负载均衡器,并且您的应用程序无状态根据 PM2 文档进行了较小的设置不。如果它不是无状态的,您可能会遇到集群模式的问题。
Also learned that pm2 itself provides built-in load balancer, whyshould i use nginx then?
首先,PM2 和 Nginx 都可以作为负载均衡器运行。人们常说 NodeJS 是“单线程”的,因此一次只能使用一个 CPU 内核 - PM2 在集群模式下 在一个主进程下运行同一个 NodeJS 应用程序的多个实例,允许您在主机上使用更多内核。 PM2 does this without requiring each instance of the app run on a different port (although it could) or IP (which I'll get to) .
您可以在集群模式下使用如下方式初始化 PM2:pm2 start -i NUMBER_OF_CORES(e.g 2) npm --name APP_NAME -- run start
与此同时,Nginx 还可以对 NodeJS 应用程序进行负载平衡 - 但是它将使用 upstream block 来实现。这需要不同的主机和不同的 IP,可能看起来像这样:
upstream app_servers {
server 127.0.0.1:3000;
server 127.0.0.1:3001;
server 127.0.0.1:3002;
server 127.0.0.1:3002;
}
server {
listen 80 ;
gzip on;
root /var/www/html;
index index.html index.htm;
server_name FRONTURL;
location / {
try_files $uri /index.html;
}
location /api/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://app_servers;
}
}
您可以看到这两个选项之间的区别主要在于 nginx 允许您在多个 IP、端口和服务器之间进行负载平衡,而 PM2 是一个快速简单的负载平衡器,适用于共享 CPU 资源的应用程序。我想,您可以尝试同时使用这两种,方法是使用 nginx 在 VM 之间负载平衡请求,然后使用 PM2 以确保每台机器都完全使用其核心。
现在,尽管如此,在集群模式下,您将在 PM2 前面使用 nginx 的主要方式是,如果您使用它来提供来自客户端呈现的应用程序(例如 react)的静态内容并与 nodejs 通信通过 HTTP 调用的后端,您希望在其中跨 CPU 内核进行负载平衡。在这种情况下,Nginx 将充当 1) 来自前端的静态内容服务器 2) 与以集群模式运行的后端通信的反向代理。在这种情况下,您的 nginx 配置可能如下所示:
{
listen 80 ;
gzip on;
root /var/www/html;
index index.html index.htm;
server_name FRONTURL;
location / {
try_files $uri /index.html;
}
location /api/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://localhost:NODEJS_PORT/;
}
}
当然,您可以通过调整位置 block 以类似的方式代理传递服务器端呈现的应用程序 ;)
关于node.js - nodejs - 我应该如何将 nginx 与 pm2 一起用于我在集群模式下运行的应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43758128/
在将网站从 GoDaddy 共享服务器传输到 EC2 实例的过程中。处理流量,在典型的一天的高峰时段,大约有 300 名活跃访客,至少可以说是有问题的。我的 CPU 使用率缓慢上升,最终达到 100%
我在一个 PM 系统上工作,我希望在最后收到的 PM 上方列出一次对话的先前发送的 PM。但我的问题是:如何在数据库中设置这样的表?我玩了一会儿关于为每个特定对话使用一个 ID,但是该 ID 的来源是
我想从给定的文本字符串中计算小时数和分钟数,目前我使用一些 excel 内置函数创建了以下公式, 示例文本字符串: 7.00pm to 8.00pm or 9.00am to 11.45pm or 1
我有一个字符串,其中包含:14 Dec 2011 9:45 am(注意“AM”没有大写) 现在我想用它创建一个 datetime 变量。 我试着查看 this ,但这与我想要的相反。我也试过this
之前创建的测试使用 DateTimeFormatter.ofPattern("ha"); 并返回 "10AM"(对于 '2017-04-09T10:00-06 :00[美国/山区]'). 在我的 Ma
我编写了正则表达式来捕获 HH:MM AM/PM/am/pm 但它无法提取精确的模式 正则表达式代码: import re def replace_entities(example): res
我的 Sql 查询如下所示: SELECT monday FROM `restaurantslive` 结果是 我想做的是在分钟后附加“AM”和“PM”,例如其中一条记录是 6:30–10:30A
我正在使用 codeigniter 和 jquery datetimepicker 插件。在我的 View 页面上,我有类似 的日期时间选择器格式 $(".traveler").datetimepic
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Android date/time displaying 0 instead of 12 下面是我使用的代码
我正在构建类似考试日期表的内容。我目前在查找时间之间的冲突时遇到问题.. 我有一个存储时间间隔的字符串列表,例如- List times = new List(); times.Add("6:00 P
DateTimeFormatter's API reference似乎错过了正确格式化 am-pm-of-day 的细节,我总是可以使用 String.replace() 但我觉得将选项更改为 AM
我在转换来自服务器的时间时遇到问题,我想将其转换为 24 小时制。我正在使用以下代码: String timeComeFromServer = "3:30 PM"; SimpleDateFormat
从 pm 帮助,我得到这个: pm uninstall: removes a package from the system. Options: -k: keep the data and c
我在前端输入日期为 10:00 AM 、12:00 PM 等...(表示 12 小时格式)。现在我想将该值保存在数据库中的 time 数据类型列中。我如何将该 AM PM 值保存到 MySQL 中的
我在执行使用 Elasticsearch.pm(新版本,小写)模块的 perl 脚本时遇到问题。 该脚本是正确的(我还使用 perl -c 选项检查了语法),但是当我尝试执行它时,我收到了这个错误:
在这个JDO中,为什么这里需要.class? Query averageSalaryQuery = pm.newQuery(Employee.class); 如果可能,我更愿意编写这种更简洁的语法?
我正在使用 2 个字段,这些字段存储为 smallint 军事结构化时间。编辑我在 IBM Informix Dynamic Server 版本 10.00.FC9 上运行 beg_tm 和 end_
我刚刚查看了 http://www.cronmaker.com/并尝试为以下场景创建 cron 表达式。 在周一和周二的两个特定时间(即 1:24 和 3:34)运行作业。 我是为此生成以下表达式的。
我想将字符串:24/11/2016 04:30 pm 转换为日期时间值:11/24/2016 04:30 pm。 我的代码为: DateTime date = DateTime.ParseExact(
这不是更困惑吗?难道不应该反过来这样更容易记住吗? 最佳答案 查看此备忘单:http://cheat.errtheblog.com/s/strftime/ Ruby 1.8 之前好像没有%P 选项,所
我是一名优秀的程序员,十分优秀!