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. unity3d工程下的data file作用

    projectData文件夹中的data file: 1. Player settings – globalgamemanagers and globalgamemanagers.assets fil ...

  2. php printf() 输出格式化的字符串

    php printf() 函数用于输出格式化的字符串,本文章向码农介绍php printf()函数的使用方法和基本使用实例,感兴趣的码农可以参考一下. 定义和用法 printf()函数输出格式化的字符 ...

  3. [Mysql]查看版本号的五种方式

    [Mysql]查看版本号的五种方式   目录(?)[+]   查看版本信息 #1 使用命令行模式进入mysql会看到最开始的提示符 Your MySQL connection id is 3Serve ...

  4. vconsole h5应用ajax请求抓包

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta co ...

  5. msq_table's methods

    -- 查看有哪些用户 host: % 代表任意地址都可以登录 host: localhost 代表仅本地可以连接select host,user from mysql.user; -- 建库 crea ...

  6. 网络软工个人作业4——Alpha阶段个人总结

    1.个人总结 (1) 类型 具体技能和面试问题 现在的回答 毕业时找工作 语言 拿手的语言 Java 软件实现 有没有在别人的代码基础上进行改进,你是怎么读懂别人的代码,你采取什么方法不影响原来的功能 ...

  7. git 提交文件到gitee

    1.新建文件夹   打开gitbash  初始化仓库 git.init 2.把要提交的文件copy到文件夹 3.git add. 4.git remote add master(分支)  远程仓库 5 ...

  8. 前端-CSS-7-标准文档流&行内元素和块级元素转换

    1.什么是标准文档流 <!--  什么是标准文档流 宏观的将,我们的web页面和ps等设计软件有本质的区别 web 网页的制作 是个“流” 从上而下 ,像 “织毛衣” 而设计软件 ,想往哪里画东 ...

  9. Oracle创建表语句(Create table)语法详解及示例

    创建表(Create table)语法详解1. ORACLE常用的字段类型ORACLE常用的字段类型有VARCHAR2 (size) 可变长度的字符串, 必须规定长度CHAR(size) 固定长度的字 ...

  10. r.js打包

    久闻r.js的大名,但实际没有用它做过任何东西.今天用它时,发现网上许多教程都不对.研究一下,把我的实际经验分享给大家. 例子1 先是HTML页面 <!DOCTYPE html> < ...