nginx是如何实现负载均衡的,nginx的upstream目前支持以下几种方式的分配:
1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
 
2、weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
 
2、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
 
3、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
 
4、url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
 
一、准备环境如下:
1、我们配置四个nginx的虚拟主机,分别如下:
www.site.com
127.0.0.1:8081
127.0.0.1:8082
127.0.0.1:8083
site1.conf的配置如下:
server {
#监听的端口号
listen 8081;
#虚拟主机名
server_name 127.0.0.1;
#编码
charset utf-8;
#访问日志
access_log logs/site1.access.log combined; location / {
#网站路径
root /data/wwwroot/site1;
#默认首页文件
index index.html index.htm index.php;
} #在http中加入fastcgi_intercept_errors on;
#配置404信息
error_page 404 /404.html;
#配置500信息
error_page 500 502 503 504 /50x.html; #缓存图片资源
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
expires 15d;
} #缓存js、css资源
location ~ .*\.(js|css)$ {
expires 1d;
} #对php的支持
location ~ \.php$ {
root /data/wwwroot/site1;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}

site2.conf和site3.conf的配置同site1.conf,只是端口、日志文件和目录地址需要修改。

 
2、三个站点下分别创建index.html,方便查看访问了哪个虚拟主机
<!DOCTYPE HTML>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
我是站点一
</body>
</html>
二、配置好上述三台虚拟主机后,我们需要在nginx.conf的http{}节点中设置upstream
#注意这里的myserver,可自定义
upstream myserver {
server 127.0.0.1:8081;
server 127.0.0.1:8082;
server 127.0.0.1:8083;
}
三、在需要负载的虚拟主机配置文件中添加
proxy_pass http://myserver;

修改后的site.conf文件如下:

server {
#监听的端口号
listen 80;
#虚拟主机名
server_name www.site.com; location / {
#注意这里的myserver要与你upstream中的命名一致
proxy_pass http://myserver; proxy_redirect off; #注意,如果是本地反向代理并且端口不区分时(比如:都是用的80端口)
#需要把下面这行注释,不然会产生死循环
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
#后端服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
四、我们重启nginx,通过浏览器访问www.site.com。
我们刷新浏览器,可以看到,网站出现的内容,会随着你的刷新,轮询显示站点一,站点二,站点三。
 
五、upstream中的配置
upstream myserver {
server 127.0.0.1:8081 weight=1;
server 127.0.0.1:8082 weight=2;
server 127.0.0.1:8083 weight=3;
}
weight默认为1,weight越大,负载的权重就越大。
upstream myserver {
server 127.0.0.1:8081 weight=1;
server 127.0.0.1:8082 weight=1;
server 127.0.0.1:8083 down;
}
down表示当前的server暂时不参与负载
upstream myserver {
server 127.0.0.1:8081 weight=1;
server 127.0.0.1:8082 weight=1;
server 127.0.0.1:8083 backup;
}

backup其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

upstream myserver {
server 127.0.0.1:8081 weight=1;
server 127.0.0.1:8082 weight=1;
server 127.0.0.1:8083 max_fails=3 fail_timeout=30s;
}

max_fails允许请求失败的次数默认为1,当超过最大次数时返回proxy_next_upstream 模块定义的错误

fail_timeout当max_fails 次失败后,暂停的时间。

linux 下 nginx的负载均衡的更多相关文章

  1. Nginx学习系列二Linux下Nginx实现负载均衡

    关于在本地虚拟机(VMware 14)下安装Linux同时安装Nginx,请参考Nginx学习系列之搭建环境 1.启动Nginx 在Nginx安装成功的前提下,启动Nginx 已root模式登陆(权限 ...

  2. Linux下Nginx+Tomcat负载均衡和动静分离配置要点

    本文使用的Linux发行版:CentOS6.7 下载地址:https://wiki.centos.org/Download 一.安装Nginx 下载源:wget http://nginx.org/pa ...

  3. Linux环境下Nginx及负载均衡

    Nginx 简介 Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器,同时也提供了 IMAP/POP3/SMTP 服务.前向代理作为客户端的代理,服务端只知道代理的 IP 地址而不知道客 ...

  4. Windows下Nginx实现负载均衡

    Apache,Nginx Apache和Nginx都属于属于 静态页面服务器,都有插件支持动态编程语言处理,但Nginx的IO模比Apache更适合跑代理.所以一般都作为前端缓冲代理(Nginx的反向 ...

  5. lnmp环境下nginx配置‘负载均衡’

    NGINX负载均衡分发请求的几种方式: 1.轮询(默认)每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除.2.weight 指定轮询几率,weight和访问比率成正比 ...

  6. Linux记录-Nginx+Tomcat负载均衡配置

    Nginx负载均衡配置及策略: 轮询(默认) 优点:实现简单缺点:不考虑每台服务器的处理能力配置示例如下:upstream www.xxx.com {# 需要负载的server列表server www ...

  7. Nginx简单介绍以及linux下使用Nginx进行负载均衡的搭建

    1.Nginx简介 Nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器.由俄罗斯的程序设计师Igor Sysoev所开发,官方测试nginx能够支支撑5 ...

  8. Linux下利用nginx实现负载均衡

    linux下利用nginx实现负载均衡 前提条件: 1,安装好jdk 2,安装好tomcat和nginx(可以参考我前两篇文章) 满足前提条件后,要用nginx实现负载均衡,主要是靠配置nginx的配 ...

  9. Linux 下 Nginx 反向代理 负载均衡配置

    转载请注明出处:http://blog.csdn.net/smartbetter/article/details/52036350 上一篇分享了 Nginx + JDK + Tomcat + MySQ ...

随机推荐

  1. 原生态的javascript的n种技巧(我从别人的博客中拷贝过来的,方便以后查阅)

    1.原生JavaScript实现字符串长度截取 function cutstr(str, len) { var temp; var icount = 0; var patrn = /[^\x00-\x ...

  2. 第13章 TCP编程(3)_基于自定义协议的多进程模型

    5. 自定义协议编程 (1)自定义协议:MSG //自定义的协议(TLV:Type length Value) typedef struct{ //协议头部 ];//TLV中的T unsigned i ...

  3. more 可翻页查看(一页一页翻动)

    命令解释 我们查看数据的时候,使用前面提到的nl与cat.tac等等,都是将文件内容一次性输出到屏幕上,看起来不是很方便,那我们就可以使用这个命令,一页一页查看,前面的数据不至于看不到. 命令说明 [ ...

  4. python 9*9示例

    # 9*9 乘法表# def nine_nine():#     for i in range(1, 10):#         for j in range(1, i+1):#            ...

  5. Python3 os.stat() 方法

    概述 os.stat() 方法用于在给定的路径上执行一个系统 stat 的调用.语法 stat()方法语法格式如下: os.stat(path) 参数 path -- 指定路径 返回值 stat 结构 ...

  6. Centos 克隆后端口eth1怎么改回eth0

    复制或克隆后成功并做好后续问题的虚拟机 修改网卡地址vi /etc/udev/rules.d/70-persistent-net.rules 配置ifcfg-eth0脚本,注意HWADDR那行,要和上 ...

  7. HTML+CSS实现页面

    使用HTML和CSS实现以下页面: 抽屉首页 个人博客首页 小米官网首页 登录注册页面 一.抽屉首页 1.实现目标:https://dig.chouti.com/ 2.代码: HTML: <!- ...

  8. 知乎日报 API的图片盗链问题

    由最近 基于vue的知乎日报单页应用 引发的问题 以及问题解决历程 通过 知乎日报API 基于vue做一个知乎日报的单页应用,在获取图片时存在一个图片盗链问题,图片无法加载 提示 403 错误, 最终 ...

  9. Bogart SysPwd.vb

    Module syspwd Public Const STR_MASK = "MyFunction" '加密用字串 '預定義密碼長度 Public GintCheckPwd As ...

  10. JS实现拖动效果

    有个问题就是该模块要使用定位,因为有left,top属性使用,绝对定位和相对定位都行,当然你也可使用margin-left,和margin-top这2个属性,替换left,top也是可以得 这样就不用 ...