博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux 下 nginx的负载均衡
阅读量:6479 次
发布时间:2019-06-23

本文共 2963 字,大约阅读时间需要 9 分钟。

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.com127.0.0.1:8081127.0.0.1:8082127.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,方便查看访问了哪个虚拟主机
    
我是站点一
二、配置好上述三台虚拟主机后,我们需要在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 次失败后,暂停的时间。

转载于:https://www.cnblogs.com/jkko123/p/6294584.html

你可能感兴趣的文章
WCF4.0新特性体验(12):服务发现WS-Discovery之Managed Service Discovery
查看>>
FOSCommentBundle功能包:运行测试
查看>>
python
查看>>
SmartGit 试用过期
查看>>
c#参数传递几点小结
查看>>
python 测试驱动开发的简单例子
查看>>
设计模式:观察者模式
查看>>
JDBC中驱动加载的过程分析
查看>>
Aes 加密简单例子
查看>>
AE 线编辑
查看>>
python 回溯法 子集树模板 系列 —— 15、总结
查看>>
软件设计之UML—UML的构成[上]
查看>>
蚂蚁金服硅谷ATEC科技大会:看技术如何带来平等的机会
查看>>
[SPLEB]CodeSmith原理剖析(1)
查看>>
Spring的AOP原理
查看>>
探秘IntelliJ IDEA 13中的版本控制——Subversion 1.8
查看>>
centos 时区设置
查看>>
老李分享:Eclipse中开发性能测试loadrunner脚本
查看>>
nginx上部署vue项目
查看>>
MySQL 数据文件目录文件类型介绍
查看>>