https://www.yduba.com/biancheng-3152689737.html
配置前的准备
我们这里准备两台服务器(centos_6.5_x64),nginx 环境都已安装好(nginx version 1.10),两台服务器 IP 分别是:
服务器A:192.168.91.128
服务器B:192.168.91.129
这里为了省的配置防火墙,暂时先把两台服务器的防火墙给关闭了,真实环境下千万不要关闭防火墙。在两台服务器上分别指行:
# service iptables stop
反向代理配置
由《图解正向代理、反向代理、透明代理》 这篇文章,我们知道,反向代理就是用户访问服务器A,服务器A再去访问服务器B,B返回数据给A,A再把数据展现给用户,其中用户并不知道有 B服务器 的存在。
其实,在 Nginx 下配置反向代理,很简单的,主要是 Nginx 的 upstream 模块配置。我们将 服务器 A 的 配置修改成如下:
......
upstream study_pc {
# 这是将去访问 192.168.91.129 服务器
server 192.168.91.129:80;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://study_pc;
proxy_set_header HOST $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
......
配置好之后,重启服务器A,其中,服务器 B不需要特别的配置,按平常配置即可。重启A服务器之后,访问 http://192.168.91.128 :
我们可以发现,访问的内容确是服务器B提供的内容,表明我们的反向代理是配置成功了。
负载均衡配置
负载均衡的原理和反向代理是一样的,唯一的区别是 反向代理的后台服务器是 1 台,负载均衡的后台服务器是由多台。即:用户访问服务器A,服务器 A 均衡的去代理服务器B 或 服务器 C,B或C返回给服务器A,A再把内容展现给用户。即如图:
这里不再去配置服务器C,我们把服务器A和B当做后台服务器,A也充当前端服务器。其中 A服务器的配置如下:
......
upstream study_pc {
# 这是将去访问 192.168.91.129 服务器
server 192.168.91.129:80;
# 这是代理到 192.168.91.128 服务器
server 192.168.91.128:8080;
}
server {
listen 8080;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
root /www;
index index.html index.php;
# if (!-e $request_filename){
# rewrite ^/(.*)$ /index.php?s=/$1 last;
# }
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME /www$fastcgi_script_name;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
}
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://study_pc;
proxy_set_header HOST $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
......
配置好之后 ,我们重启服务器A的 Nginx ,我们再去访问 http://192.168.91.128 发现,有时显示的内容是服务器A的内容,有时显示的内容是服务器B内容,这也说明 负载均衡 配置是成功的。
upstream 的分配方式
在上面的配置中,我们没有设置 upstream 的分配方式,默认情况下,这将采用轮询的方式,即每个请求按时间逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
其实,我们可以手动设置 upstream 的分配方式 nginx 有 5 种分配方式,分别是:
1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
如:
upstream study_pc {
server 192.168.91.129:8080;
server 192.168.91.128:8080;
}
2、weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。如:
upstream study_pc {
server 192.168.91.129:8080 weight=10;
server 192.168.91.128:8080 weight=15;
}
3、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。如:
upstream study_pc {
server 192.168.91.129:8080;
server 192.168.91.128:8080;
ip_hash;
}
4、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。这个是第三方模块,需要额外安装。配置如下:
upstream study_pc {
server 192.168.91.129:8080;
server 192.168.91.128:8080;
fair;
}
5、url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。这个是第三方模块,需要额外安装。配置如下:
upstream study_pc {
server 192.168.91.129:8080;
server 192.168.91.128:8080;
hash $request_uri;
hash_method crc32;
}
注意:使用 url_hash 时,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法。
upstream 服务状态
upstream 在配置后端服务器时,可以指定服务器的状态,如:
upstream study_pc {
server 192.168.91.129:8080 down;
server 192.168.91.128:8080;
}
每个设置的状态设置参数可以有以下几个值:
1、down 表示单前的 server 暂时不参与负载
2、weight 默认为1;weight 越大,负载的权重就越大。
3、max_fails:允许请求失败的次数默认为1.当超过最大次数时,返回 proxy_next_upstream 模块定义的错误
4、fail_timeout:max_fails 次失败后,暂停的时间。
5、backup: 其它所有的非 backup 机器 down 或者忙的时候,请求 backup 机器。所以这台机器压力会最轻。