16 nginx实现负载均衡
一:nginx实现负载均衡
-----------------原理--------------------------
(1) 反向代理后端如果有多台服务器,自然可形成负载均衡,但proxy_pass如何指向多台服务器?
答:把多台服务器用 upstream指定绑定在一起并起个组名,然后proxy_pass指向该组
(2)默认的均衡的算法很简单,就是针对后端服务器的顺序,逐个请求.也有其他负载均衡算法,如一致性哈希,需要安装第3方模块
-----------------------------------------------
实现过程[假设以图片服务器为案例]:
(1)开启http信息头记录
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
(2)定义服务组
upstream imgserver{
#max_fails 连接2次 fail_timeout 超过多长时间超时
server 127.0.0.1:81 weight=1 max_fails=2 fail_timeout=3;
server 127.0.0.1:82 weight=1 max_fails=2 fail_timeout=3;
}
(3)指向服务器组名
location ~* \.(jpg|jpeg|gif|png)$ {
#设置http信息头 记录来源地址
proxy_set_header X-Forwarded-For $remote_addr;
#指向图片服务器组名
proxy_pass http://imgserver;
}
(4)建立两台虚拟服务器
server{
listen 81;
server_name 127.0.0.1;
root html;
#写入日志
access_log logs/81-access.log main;
}
server{
listen 82;
server_name 127.0.0.1;
root html;
#写入日志
access_log logs/81-access.log main;
}
(5)解析php程序
location ~ \.php$ {
#增加http信息头 显示来源地址。
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://127.0.0.1:8080;
}