Nginx负载均衡
1、简介--参考文档
Nginx最大的两个优点是反向代理和负载均衡
负载均衡的前提是至少拥有两台服务器,负载均衡是通过upstream模块来实现的,其中内置有三种策略,
第一种:轮询(默认)----根据请求次数军训的分配到每台服务器
第二种:最少连接------将请求分配给连接数最少的服务器,nginx统计哪些服务器的连接数最少
第三种:IP Hash--------绑定处理请求的服务器
2、测试环境
测试域名:www.test.com
A服务器IP:192.168.1.110(主)
B服务器IP:192.168.1.120
C服务器IP:192.168.1.130
3、部署思路
A服务器作为主服务器,域名解析到A服务器,然后再由A服务器负载均衡到B和C服务器上。
4、在Windows上指定域名:
C:/windows/system32/drivers/etc/hosts
192.168.1.110 www.test.com
A服务器的nginx.conf
在http段加入一下代码:
upstream test.com {
server 192.168.1.120:80;
server 192.168.1.130:80;
}
server{
listen 80;
server_name test.com;
location / {
proxy_pass http://test.com;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
保存并重启nginx
B、C服务器nginx.conf配置
server{
listen 80;
server_name test.com;
index index.html index.php index.htm;
root /home/www/website;
}
设置主服务器也提供服务的配置方式:
80端口已经用于监听负载均衡的处理,那么本服务器器上就不能再使用80端口来处理a.com的访问请求,我们需要在nginx.conf配置文件中加入一下代码。
server{
listen 8080;
server_name test.com;
index index.html index.php inde.php;
root /home/www/website;
}
修改主服务器端口:
upstream test.com {
server 192.168.1.130:80;
server 192.168.1.120:80;
server 127.0.0.1:8080;
}
第二种方式nginx,php-fpm搭建负载均衡:
主服务器安装LNMP环境,从服务器仅安装php-pfm即可
配置192.168.1.120和192.68.1.130服务器上的php-fpm中的www.conf配置文件
#192.168.1.120中的www.conf
listen = 192.168.1.120:9000
listen.allowed_clients = 192.168.1.110
#192.168.1.130中的www.conf
listen = 192.168.1.130:9000
listen.allowed_clients = 192.168.1.110
配置完毕进行重启php-fpm服务
额外配置项:
weight:设置服务器权重----权重越大分配的比例越大
权重分配方式:
upstream test.com{
server 192.168.1.110:8080 weight=1;
server 192.168.1.120:8080 weight=2;
server 192.168.1.130:8080 weight=3;
}
max_fails:server允许请求失败的次数,超过最大次数,在fail_timeout时间内,新的请求将不会分配给这台机器
fail_timeout:某台server达到max_fails次失败请求后,在fail_timeout期间内,nginx会认为这台server暂时不可用,不会将请求分配给它
backup:备份机,所有的服务器挂了之后才会生效
max_conns:限制分配给某台server处理的最大连接数量,超过不再分配,默认0表示不受限制-------1.5.9版本之后才有这个配置
#配置均衡日志 可以看到具体代理到了哪台机器的fpm
log_format upstreamlog '[$time_local] $remote_addr - $remote_user - $server_name to: $upstream_addr: $request upstream_response_time $upstream_response_time msec $msec request_time $request_time';
access_log /var/log/nginx/$host.access.log upstreamlog;
upstream php-fpm-backend {
#轮叫调度(Round-RobinScheduling)模式
server 127.0.0.1:9000;
server 192.168.1.120:9000;
server 192.168.1.130:9000;
}
#test-dev.conf vhost 配置
server_name www.test.com;
root /home/www/website;
location ~ \.php$ {
fastcgi_pass php-fpm-backend;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}