飞嗨,欢迎您的光临,本博所发布之文章皆为作者亲测通过,如有错误,欢迎通过各种方式指正。(本博已于2015.12.6升级到php7,运行环境php7 php-fpm + nginx1.8.0)

nginx负载均衡配置

Linux lf 6814℃ 0评论

这已经是春节后第三天了,还是没有进入状态。负载均衡,在春节前(使用nginx搭建反向代理)其实已经看过了…今天把他做出来…

nginx负载均衡

nginx负载均衡


曾经,还在大学的时候,我用vmware创建了几个centos虚拟机实例,用ipvsadm已经实现了负载均衡:让对外网暴露的主服务器接受请求,然后按照轮询或者加权轮询的方式,向内网的web服务器请求数据,然后回传给客户,就是反向代理。记得这个设置真的很麻烦麻烦麻烦!!!最近,服务器配置了nginx环境,利用nginx的反向代理,简单的设置,就能实现lvs负载均衡。
lvs

lvs


lvs

lvs


大流量的站点,就算单台服务器再流弊流弊流弊,硬件也总是会受限,服务器集群是一个很好的办法,lvs负载均衡器是个好东东,能把请求按照加权/轮询的方式均衡到内网的服务器集群中去,但是,貌似这种硬件设备很贵,于是,就开始折腾软件了,nginx不仅是个流弊的web server,反向代理也是相当流弊。
nginx的upstream支持4种方式的分配

一、轮询(默认)   每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器挂了,可以被自动剔除

二、weight加权轮询   可以指定轮询几率,weight的值和被轮询到的次数成正比,用于后端服务器配置不均的情况

三、ip_hash   每个请求按访问的ip的hash结果分配,这样,每个访客固定访问一个后端的服务器,可以解决session的问题。session默认是写在内存中的,如果用户登陆后,刷新页面后,轮询到后端的不同服务器会造成session找不到,达不到登陆的效果。当然,这里也可以把session写到单独的memcache或数据库中,或者smba中,实现服务器集群共享session

四、url_hash   根据url的hash结果来分配请求

nginx介个七层反向代理设置还是很简单哒:
1.新建一个vhost:
proxy_pass的地址要和upstream的名字一致server {
listen 80;
#server_name somename alias another.alias;
server_name lvs.wfee.feehi.com;
location / {
proxy_pass http://myServer;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}2.在多个服务器上配置web server并放置web站点,因为服务器数量有限,我这里还是用nginx多开了几个vhost,轮询的都是同一台服务器上的站点,实际工作中可以轮询不同的服务器,才有意义的吗
因为vhost是基于域名不同,访问不同的网站的,所以要把8080.wfee.feehi.com 9090.wfee.feehi.com 8888.wfee.feehi.com解析过来,但是我的是微软云服务器,本身在内网中,如果通过公网访问,还要设置端口转发,为了简便,修改/etc/hosts,在本机把这几个域名都解析到127.0.0.1

hosts

hosts


resolver

resolver


解析过后,在本机上wget 8080.wfee.feehi.com:8080已经能正常访问了,vhost配置完成了
3.把需要轮询的内网服务器加入到upstream里面,这段配置放置在http段之中upstream myServer {
server 8080.wfee.feehi.com:8080;
server 9090.wfee.feehi.com:9090 weight=3;
server 8888.wfee.feehi.com:8888;
}weight=3是加权轮询,让这台服务器被轮询的概率更高。
搞定,看看结果:
第一次

第一次


第二次

第二次


第三次

第三次


第四次

第四次


第五次

第五次

lvs负载均衡结束——————————————————————————————————————————— nginx做lvs负载均衡还是棒棒哒,可惜,我的任何站点,流量都是相当有限有限有限,压根就不需要负载均衡。。。我觉着用nginx做反向代理,fq还是最实用的吧。可惜,俺滴这台服务器在境内,上海机房,,,也是不能访问内个啥非法网站,诸如神马推特、脸书之类的…
在http段中加入:server{
resolver 114.114.114.114;
listen 82;
location / {
proxy_pass http://$http_host$request_uri;
}
}正向代理如squid就是不需要用户设置了,反向代理就需要用户设置一下:
打开IE->设置->Internet 选项->连接->局域网设置->勾选为LAN使用代理服务器,并填入代理地址和端口,如图:
地址 wfee.feehi.com   端口82
LAN代理

LAN代理


设置完成后,然后再在浏览器中访问网站时,是向wfee.feehi.com:82请求数据,由服务器代为去请求页面然后再返回,此时访问百度自己的ip,看请求地址:
代理

代理


ip变成了服务器的ip,请求的地址也不是直接向百度请求了,通过的nginx/1.7.9反向代理返回的数据。此时,若是服务器能访问facebook,那……
好吧,我觉着,nginx反向代理,在俺的博客访问量不大的情况下,介个用法更实用…
 

转载请注明:飞嗨 » nginx负载均衡配置

喜欢 (1)or分享 (0)
发表我的评论
取消评论
表情
(4)个小伙伴在吐槽
  1. 你好,请教下这样负载均衡以后带宽加倍吗
    匿名2015-11-15 23:11 回复
    • 所有的请求都是经过前置机转发到后端去的,所以前置机的公网带宽肯定要足够支撑
      lf2015-12-26 22:34 回复
      • 请问,比如客户端向服务器请求一个文件,这个文件返回给客户端时,是直接从后端业务服务器返回至客户端,还是需要经过nginx负载均衡服务器的?谢谢
        匿名2016-01-02 22:55 回复
        • 静态资源可以放到单独的服务器上后者cdn上面啊
          lf2016-03-01 16:14 回复
粤ICP备15018643号-1