关闭

用Nginx做NodeJS应用的负载均衡

标签: nginxnginx负载均衡node.js
13578人阅读 评论(2) 收藏 举报
分类:

《用Nginx做NodeJS应用的负载均衡》

作者:chszs,转载需注明。博客主页:http://blog.csdn.net/chszs

负载均衡可以把用户的请求分摊到多个服务器上进行处理,从而实现了对海量用户的访问支持。负载均衡的架构如图所示:


对于复杂的Web应用来说,用Nginx做前端负载均衡是理所当然的事。

下面,我们用Nginx做NodeJS应用的负载均衡。

1、配置Nginx

修改nginx.conf:

....
        upstream sample {
	      server 127.0.0.1:3000;
	      server 127.0.0.1:3001;
	      keepalive 64;
	    }
         server {
	        listen 80;
	        ....
            server_name 127.0.0.1;
	        ....
            location / {
               proxy_redirect off;
               proxy_set_header X-Real-IP $remote_addr;
               proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
               proxy_set_header X-Forwarded-Proto $scheme;
               proxy_set_header Host $http_host;
               proxy_set_header X-NginX-Proxy true;
               proxy_set_header Connection "";
               proxy_http_version 1.1;
               proxy_pass http://sample;
           }
        }
这里在3000端口和3001端口各有一个Node.js服务器,这两个服务器在做同样的工作。在upstream节,配置了两个Node.js服务器。此外,我们还设置了proxy_pass http://sample做HTTP请求代理。

2、构建NodeJS服务器

var http = require('http');
var morgan       = require('morgan');

var server1 = http.createServer(function (req, res) {
  console.log("Request for:  " + req.url + "-- port 3000 ");
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello Node.js\n');
}).listen(3000, "127.0.0.1");

var server2 = http.createServer(function (req, res) {
  console.log("Request for:  " + req.url + "-- port 3001 ");
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello Node.js\n');
}).listen(3001, "127.0.0.1");

server1.once('listening', function() {
  console.log('Server running at http://127.0.0.1:3000/');
});

server2.once('listening', function() {
  console.log('Server running at http://127.0.0.1:3001/');
});
3、访问Nginx服务器

现在我们可以访问http://127.0.0.1

可以看到如下的输出:

  Server running at http://127.0.0.1:3000/
  Server running at http://127.0.0.1:3001/
  Request for:  /-- port 3001 
  Request for:  /favicon.ico-- port 3000 
  Request for:  /favicon.ico-- port 3001 
  Request for:  /-- port 3000 
  Request for:  /favicon.ico-- port 3001 
  Request for:  /favicon.ico-- port 3000 
  Request for:  /-- port 3001 
  Request for:  /favicon.ico-- port 3000 
  Request for:  /favicon.ico-- port 3001 
  Request for:  /-- port 3000 
  Request for:  /favicon.ico-- port 3001 
  Request for:  /favicon.ico-- port 3000 

0
0
查看评论

nodejs与nginx的完美搭配

引言node自己本身可以作为服务器进行驱动,但是node本身对文件的处理能力并不是很好,所以当我们的生产环境中应尽量使用nginx来处理静态的资源以及反向代理,同时也解决了node分布式以及负载均衡的相关问题。nginx的安装以及配置这里以cenos环境为基础进行配置1、基础编译环境的配置C/C++...
  • qq_17475155
  • qq_17475155
  • 2017-03-26 12:55
  • 13758

nginx + node.js配合使用

nginx是最好的反向代理服务器。
  • wyqlxy
  • wyqlxy
  • 2014-06-24 20:33
  • 2572

服务器nginx+nodejs配置

nodejs默认端口是3000,而服务器原来就有nginx+php网站80端口已经占用,现在配置nginx反向代理到nodejs的3000端口 nginx配置反向代理 location / { proxy_pass http://127.0.0.1:3000; ...
  • a454213722
  • a454213722
  • 2016-06-09 12:00
  • 8234

nginx and node.js配合使用 helloworld

nginx是最好的反向代理服务器。 node.js是。。。 好吧 ,不介绍了,猛击这里 现在小介绍下怎么用nginx和node.js配合使用。 先写个helloworld.js var http = require('http'); http.createSe
  • soasme
  • soasme
  • 2011-08-24 09:39
  • 22480

使用pm2躺着实现负载均衡

前言源码:https://github.com/Unitech/pm2 这里的pm2并不是大气污染物啊 事实上,pm2 是一个带有负载均衡功能的Node应用的进程管理器,Node实现进程管理的库有很多,forever也是其中一个很强大但是也相对较老的进程管理器。为什么要使用pm2对于这个问题,先...
  • qq_17475155
  • qq_17475155
  • 2016-12-23 00:27
  • 10720

node.js cluster多进程、负载均衡和平滑重启

1 cluster多进程 cluster经过好几代的发展,现在已经比较好使了。利用cluster,可以自动完成子进程worker分配request的事情,就不再需要自己写代码在master进程中robin式给每个worker分配任务了。 const cluster = require...
  • u013080278
  • u013080278
  • 2017-11-16 11:48
  • 58

MQ消息中间件技术

消息是MQ中最小的概念,本质上就是一段数据,它能被一个或者多个应用程序所理解,是应用程序之间传递的信息载体。
  • apanious
  • apanious
  • 2016-03-30 14:46
  • 38379

基于nodejs的分布式服务构建

基于nodejs的分布式服务构建
  • eugenelee2096
  • eugenelee2096
  • 2017-06-15 10:58
  • 1177

socket.io分布式

socket.io是目前较为流行的web实时推送框架,其基于nodejs语言开发,底层用engine.io实现。 借助nodejs语言异步的特性,其获得了不错的性能。但单个实例的socket.io依然承载能力有限,最多只能容纳3000个long-polling方式的客户端进行连接。 将socket....
  • kelong_xhu
  • kelong_xhu
  • 2016-03-10 16:41
  • 3963

架构设计:系统间通信(27)——其他消息中间件及场景应用(上)

目前业界有很多消息中间件可供大家选择,主要分为两类:需要付费的商业软件和开源共享的非商业软件。对于商业软件您和您的团队可以选择IBM WebSphere集成的MQ功能,也可以选择Oracle WebLogic集成的MQ功能。本文首先介绍除Apache ActiveMQ以外的两款开源共享的消息中间件产...
  • yinwenjie
  • yinwenjie
  • 2016-04-28 15:12
  • 25722
    个人资料
    • 访问:5961692次
    • 积分:52140
    • 等级:
    • 排名:第64名
    • 原创:795篇
    • 转载:23篇
    • 译文:24篇
    • 评论:1190条
    一名路过的黑客

    大家好,我是黑客,专门盗账号的。现在这个人的帐号被我盗了,但看这个人平时的博客空间,一直过着艰苦努力、持之以恒的技术研究生活,勤奋刻苦,积极分享,无私奉献,我被深深的感动了,这是一个纯粹的人,人品这样的高尚,希望大家看到我这条消息后,可以私聊他,多鼓励他,不缺钱的就多给他一些经济上的资助,让他再接再厉!就这样吧,我下线了,眼框湿湿的难受。

    文章存档