1.nignx配置利用反向代理配置负载均衡
1.1 简单说下代理与反向代理:
简单来来说 正向代理是代理的客户端,为客户端去收发请求,比如我们常用的ss
FQ软件,是一个典型的正向代理软件,反射代理呢,是代理的服务器端,为服务器端收发请求,使真实的服务器对客户端不可见
1.2 利用nginx的反向代理功能实现负载均衡
http{
#负载
upstream mytest{
server 192.168.81.131:80 weight=3 max_fails=3 fail_timeout=15;
server 192.168.81.132:80 weight=2 ;
server 192.168.81.133:80 down;
server 192.168.81.133:80 backup;
ip_hash;
}
server{
listen 80;
server_name www.lnss.com;
index index.html index.php;
location / {
proxy_pass http://mytest;
proxy_redirect off;
proxy_set_header X-Real_IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarder_for;
proxf_set_header Host $host;
}
}
}
- nginx的内置负载策略有三种,它的负载均衡是通过upstream模块实现的
- 轮询(默认): 它会根据请求次数,将每个请求均匀的分配到每台服务器
- 最少链接: 将请求分配给链接最少的服务器
- ip hash 它会绑定处理请求的服务器,第一次请求后,会根据客户端的ip算出一个hash值,指定到一个服务器,以后这个ip再请求都会只请求这个服务器(可以简单的处理下sessions共存问题,但我们不建议这么做,以后有机会再说吧)
相关参数说明:
- proxy_pass http://mytest 表示把所有的请求都转发到mytest服务器组中
- upstream模块 配置反向代理服务器组
- upsteam > server 配置处理请求的服务器ip或者域名,端口可不写,默认为80
- weight 权重 默认为1 值越大,请求次数分配给的就越多
- max_fails 默认为1 某台服务器允许失败的次数,超过这个次数,在fail_timeout时间内不再分配给这个服务器
- backup 备份机,当所有服务器挂了后,它才会生效 ,可以使用这个特性来做个热备份呗
- 还有好多个参数呢 …
- 当然还有一些静态代理啥的, 以后有机会再说吧…
1.3 再来个知识点吧 设置负载均衡后,后端服务器,如何获取真实的客户端ip呢?(这里以php为例了呀,别的我也不会!)
当我们没有用上负载,cdn啥的时候,我们只是把应用服务器暴露在公网上,任由别人来那啥的时候(你懂的~~~),我们只需要在在代码里使用 $_SERVER['REMOTE_ADDR']
就可以获取客户端的ip,(小黑板:这个ip是不会伪造的,它是跟你服务器握手的最后一个ip,是可靠的),但是当我们使用上负载后呢,可以使用
-
$_Server['HTTP_CLIENT_IP']
来获取,但是服务器上不一定实现了,客户端可以伪造,不可信任 -
$_SERVER['HTTP_X_FORWARDED_FOR']
也可以获取到,是用来表示经过代理后客户端ip,是可以伪造的,不可信任那么问题来了,如何严格来获取客户端真的ip呢
思路就是,在nginx负载这里获取真实的ip再转发到php服务器,如上面的那种配置
有啥问题,再留言吧~~~~