ngnix + node 的負載均衡

node.js 作服務器?html

node.js當仁不讓,我有赤兔馬(異步),手中方天畫戟(事件IO)。node

一種too simple ,sometimes naive的感受油然而生。nginx

久經考驗的nginx 前置頂住壓力,後面多個node服務器完成業務支撐,這樣的作法是放心的,是走正道的。服務器

這裏要作一個實驗:網絡

1. 一個nginx做爲前臺的服務器
2. 所有請求,通過負載均衡,儘量均衡的分步到後面的2臺node服務器

準備node

首先啓動兩臺node,分別監聽3000,3001端口。爲了區分,helloworld會帶一個端口返回,通知客戶端,以便區別是誰在提供服務。負載均衡

node.js server

$cat 1.js 
require('http').createServer(function (request, response) {  
  response.end('hello world\n'+process.argv[2]);  
}).listen(process.argv[2]);  
$node 1.js 3000
$node 1.js 3001

驗證node 服務器啓動

λ curl localhost:3000
hello world
3000
λ curl localhost:3001
hello world
3001

準備nginx 服務器的配置。

要點是經過upstream 指令把兩個node服務器打成一個服務器池。而後經過location指令,要求所有根目錄請求轉發到這個池內。池會對它以內的服務器作負載均衡。curl

nginx conf

worker_processes  1;
events {
    worker_connections  1024;
}
http {
     upstream node_server_pool {
       server localhost:3001 max_fails=1;
       server localhost:3000 max_fails=1;
    }
    server{
      listen       80;
      server_name localhost;
      location /
       {
        proxy_pass http://node_server_pool;
       }
    }
}

模擬客戶端訪問

我用curl屢次訪問nginx服務器,能夠經過返回的字符串知道服務器。你看,真的能夠負載均衡:一下子helloworld 3000,一下子helloworld 3001。異步

λ curl localhost
hello world
3000

λ curl localhost
hello world
3001

λ curl localhost
hello world
3001

λ curl localhost
hello world
3000

你看,ngnix是公平的。哪怕就一個客戶的屢次訪問都會換着服務器來。oop

參考

node.js成也異步,敗也異步,評node.js的異步特性 | 江淼的Blog - http://www.jiangmiao.org/blog/2491.html性能

Node.js + Nginx - What now? - Stack Overflow - http://stackoverflow.com/questions/5009324/node-js-nginx-what-now

爲高負載網絡優化 Nginx 和 Node.js - 技術翻譯 - 開源中國社區 - http://www.oschina.net/translate/optimising-nginx-node-js-and-networki...

讓node.js充分利用多核服務器的性能,運用nginx作反向代理和負載均衡 - snoopyxdy的日誌 - 網易博客 - http://snoopyxdy.blog.163.com/blog/static/60117440201172954648952/

相關文章
相關標籤/搜索