原文链接:http://www.cnblogs.com/shuoer/p/7820899.html

Nginx反向代理和负载均衡

环境说明

由于我使用的是windows系统,所以我用虚拟机虚拟出来了3台linux系统

  • 虚拟机一:192.168.1.20 (Nginx反向代理和负载均衡服务器,系统kali linux)
  • 虚拟机二:192.168.1.19 (node服务器一,系统ubuntu 17.10)
  • 虚拟机三:192.168.1.22(node服务器二,系统ubuntu 17.10)

环境需要的程序

  • git
  • Node
  • Nginx
  • pm2

首先环境的搭建,由于这三台电脑都是我刚刚虚拟出来的,所以什么环境都没有!

虚拟机一的环境搭建

由于我们的虚拟机一主要是用来做Nginx的反向代理和负载均衡的,那么我们只需要安装Nginx就可以

$ sudo apt-get install nginx -y

ok我们访问下Nginx反向代理服务器是否正常启动

虚拟机二和虚拟机三的环境搭建

我比较喜欢使用nvm去安装node,因为nvm能让我自由的去切换node的版本(两台node服务器环境必须一致哦!)

//安装git工具
$ sudo apt-get install git//从github网站把nvm的源码下载下来放到当前登录用户的.nvm目录下(以后方便我们找)
$ git clone https://github.com/creationix/nvm.git ~/.nvm//让nvm命令在每次打开shell窗口的时候生效 $ echo "source ~/.nvm/nvm.sh" >> ~/.bashrc //让nvm的命令立即生效(关闭shell窗口重新打开也可以生效) $ source ~/.nvm/nvm.sh //查看nvm是否安装成功和查看当前的node版本信息 $ nvm ls

我们安装下node,此处直接安装stable最新的稳定版本

//这个时间会比较长,稍微有点耐心
$ nvm install stable

安装pm2

$ npm install pm2 -g

编写我们的项目代码

初始化项目创建package.json

$ mkdir nodeapp && cd $_
$ npm init
$ npm install koa --save

创建我们的node主程序入口文件app.js(由于我们只关注与上线发布和负载均衡所以node项目只是一个Hello Koa)

const Koa = require('koa'); const app = new Koa(); app.use(ctx => { ctx.body = 'Hello Koa'; }); app.listen(3000);

编写pm2的配置文件pm2.json

pm2 是一个带有负载均衡功能的Node应用的进程管理器.
当你要把你的独立代码利用全部的服务器上的所有CPU,并保证进程永远都活着,0秒的重载。pm2官网
pm2重用的命令

  • pm2 start app.js : 启动服务,入口文件是app.js。
  • pm2 start app.js -i [n] --name [name] : 启动n个进程,名字命名为name。
  • npm stop [name or id] : 停止服务。
  • npm stop all : 停止所有服务。
  • npm delete [name or id] : 删除服务。
  • npm delete all : 删除所有服务。
  • npm restart [name or id] : 重启服务。
  • npm reload [name or id] : 和rastart功能相同,但是可以实现0s的无缝衔接;如果有nginx的使用经验,可以对比nginx reload指令。
  • pm2 monit : 对服务进行监控。
  • pm2 start **.json : 启动制定配置文件的服务

ok知道pm2怎么用了,我们采用配置文件的方式启动,接下来编写我们的pm2.json配置文件

{"name"      : "nodeApp",//max_memory_restart: "300M",//设置node单个进程可占用最大的内存,如果内存使用率超过300M,pm2自动重启该进程 "script" : "app.js",//node主入口文件 "out_file" : "logs/out.log", "error_file" : "logs/error.log", "instances" : "max",//让node程序占满你的cpu,发挥cpu最大的功效 "exec_mode" : "cluster",//以主进程的方式启动 "watch":true }

那pm2的配置文件和node程序写好了我们在本地测试下pm2和node程序能不能正常的启动(有点小尴尬,自己本机I7的6700K的CPU居然被这个小程序给占满了~~~)

上线部署到我们的两台node服务器中

其实说到上线部署呢,我们应该有自己的git服务器,所有的代码都应该从git服务器上去拉取,部署呢?应该有一个统一部署的方式通常使用的是jenkins,编写好我们统一部署的shell脚本(在这里体现出来为什么所有的服务器环境必须一致了,方便管理啊),用jenkins一键部署,但是.....本次只是做个小实验,没必要这么大动干戈,所以呢,我们还是手动的上传下代码手动起下服务吧!(下次介绍如何搭建自己的git服务器和jenkins的使用)
我们把项目中的node_moudles文件夹删除然后给项目打个包准备上传服务器,项目结构应该是这样的

我们使用scp命令用于将一个文件从本地上传至服务器,或者从服务器上把一个文件下载至本地
郑重说明:由于我本地用的windows系统,为了演示我把项目文件拽进了另一个linux虚拟机中进行的上传

//scp 本地文件 远程服务器用户名@远程服务器地址:/home/shuoer//把项目文件上传至虚拟机一
scp nodeapp.zip shuoer@192.168.1.19/home/shuoer //把项目文件上传至虚拟机二 scp nodeapp.zip shuoer@192.168.1.22/home/shuoer

额.....报错了!

额...好像ssh服务没起来,好像也没有安装

//安装ssh
$ sudo apt-get install ssh -y//不管ssh启动没有直接重启ssh
$ sudo service ssh restart

ok,好不容易上传成功了,我们分别进入这两台服务器进行项目解压和安装依赖最后启动服务

为了明显我们在两台服务器上分别让页面输出自己的ip地址

重头戏来了,Nginx的反向代理和负载均衡

进入我们的虚拟机一,配置nginx.conf
温馨提示:

  • nginx的配置文件默认在/etc/nginx/nginx.conf
  • 网站根目录默认在/var/www/html

upstream模块

负载均衡模块用于从”upstream”指令定义的后端主机列表中选取一台主机。nginx先使用负载均衡模块找到一台主机,再使用upstream模块实现与这台主机的交互。

nginx 的两种负载均衡方式

  • 轮训加权(也可以不加权,就是1:1负载)
    我们可以根据两台服务器的性能进行分配权重,比如192.168.1.19服务器比较牛逼,另外一个比较差我们可以这么配置,按照4:1分配,比如5次访问有4次访问的是192.168.1.19服务器

    upstream test {server 192.168.1.19:3000 weight=4;server 192.168.1.22:3000 weight=1; }
  • ip_hash(同一ip会被分配给固定的后端服务器,解决session问题)

    #”ip_hash”只能在upstream {}中使用。这条指令用于通知nginx使用ip hash负载均衡算法。
    #如果没加这条指令,nginx会使用默认的round robin负载均衡模块。
    upstream test {ip_hash;server 192.168.1.19:3000;server 192.168.1.22:3000;
    }

打开nginx.conf我的可能和你们的都不一样(我把所有的注释都删除了,是不是整洁了很多?)
填入如下代码,这里我没有采用负载均衡的任何算法

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf; events { worker_connections 768; } http { sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE ssl_prefer_server_ciphers on; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; gzip on; #include /etc/nginx/conf.d/*.conf; #include /etc/nginx/sites-enabled/*; #用于设置负载的服务器列表 upstream test { #虚拟机二 server 192.168.1.19:3000; #虚拟机三 server 192.168.1.22:3000; } server { #监听80端口 listen 80; location / { #转发的地址,此处为upstream模块 proxy_pass http://test; } } }

ok,将配置文件保存好之后重启我们的nginx

$ sudo service nginx restart

打开浏览器检验下我们的成果

转载于:https://www.cnblogs.com/xuanbiyijue/p/7856327.html

【转】Nginx反向代理和负载均衡相关推荐

  1. 懂点 Nginx 反向代理与负载均衡,是面试加分项没有之一

    点击上方"方志朋",选择"置顶公众号" 技术文章第一时间送达! 学到老活到老 前端圈一直很新,一直要不停的学习,而且在进入大厂的路上,还要求熟悉一门后台语言等等 ...

  2. Nginx反向代理,负载均衡,redis session共享,keepalived高可用

    本站点停止更新,请访问:blog.coocap.com 相关知识自行搜索,直接上干货... 使用的资源: nginx主服务器一台,nginx备服务器一台,使用keepalived进行宕机切换. tom ...

  3. nginx ------反向代理和负载均衡

    nginx ------反向代理和负载均衡 最近由于公司的业务增长 服务器承受不住压力经常出现崩溃现象 为了解决 使用nginx的负载均衡解决,以下是操作步骤: 1.nginx 的负载均衡:将压力分散 ...

  4. Nginx反向代理与负载均衡等配置文件示例

    Nginx反向代理于负载均衡等配置文件示例 Nginx.conf配置文件 worker_processes 8;events {worker_connections 1024; }http {incl ...

  5. 基于Nginx反向代理及负载均衡

    基于Nginx反向代理及负载均衡 参考:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass 只要没有被启用,默认就是 ...

  6. sql server代理无法启动_谁说前端不需要懂Nginx反向代理与负载均衡

    作者 | chenhongdong 链接 | https://juejin.im/post/5b01336af265da0b8a67e5c9 学到老活到老 前端圈一直很新,一直要不停的学习,而且在进入 ...

  7. 使用nginx负载均衡的webservice wsdl访问不到_谁说前端不用懂,Nginx 反向代理与负载均衡(超实用)...

    谁说前端不需要懂-Nginx反向代理与负载均衡 学到老活到老 前端圈一直很新,一直要不停的学习,而且在进入大厂的路上,还要求熟悉一门后台语言等等.用一句别人开玩笑的话来说,java十年前的技术现在还能 ...

  8. docker实现nginx反向代理、负载均衡

    docker实现nginx反向代理.负载均衡 启动docker服务 systemctl start docker.server 查看docker镜像 docker images 拉取tomcat.ng ...

  9. Nginx反向代理与负载均衡应用实践(二)

    Nginx反向代理与负载均衡应用实践(二) 链接:https://pan.baidu.com/s/1xB20bnuanh0Avs4kwRpSXQ 提取码:migq 复制这段内容后打开百度网盘手机App ...

最新文章

  1. 支持者基于BCH提出众多新概念,推动BCH创新
  2. 拒绝干扰 解决Wi-Fi的最大问题《转》
  3. MySQL事务的特性及事务隔离级别演示
  4. ssm(Spring+Spring mvc+mybatis)
  5. 惊呆了! | Spring Boot 使用 @Value 读取配置还能这样用
  6. python unescape函数_Python中的Unescape字符串
  7. ARC077C pushpush 递推
  8. PYTHON莫名其妙的崩溃
  9. Navicat安装教程(超详细)
  10. echarts 节点拖拽
  11. 《ANSYS Workbench有限元分析实例详解(静力学)》——第1章 CAE分析步骤1.1 模型简化...
  12. django教程ajax,Django Ajax的使用教程
  13. 如何将标准地图服务中的eps格式中国地图应用到论文中带审图号的地图制作?(二)
  14. 计算机系统具有运行可靠性,计算机系统的可靠性技术
  15. Routh-Hurwitz Criterion 劳斯稳定判据
  16. 简明python教程五----数据结构(下)
  17. 港股2017年表现全球最好,区块链将助推新经济牛市?
  18. 英特尔 超核芯显卡 620mac_显卡性能翻倍,AI能力加持:英特尔发布10代酷睿处理器...
  19. 网络舆情信息工作怎么做的措施及建议
  20. Arcgis 熟练和操作

热门文章

  1. php弹出第一个数组中,PHP array_search始终返回数组的第一个键
  2. EditPlus3.21注册码
  3. Linux多线程编程(一)---多线程基本编程
  4. 如何进行良好的程序设计(1)
  5. 修改mysql数据库名方法_安全快速修改Mysql数据库名的5种方法
  6. linux mysql 主从数据库_linux mysql数据库的主从配置
  7. nginx工作进程处理请求的系统调用
  8. eclipse启动不了并报错Java was started but exit with code 13 问题解决
  9. [攻防世界 pwn]——cgpwn2
  10. CA AutoSys Workload Automation r11 Quick Resource Guide