利用docker在本地搭建三个nginx容器,三个nginx容器在同一网段,可以互通。
容器分别如下
nginx1:172.18.0.2 ,担任负载均衡转发服务器
nginx2:172.18.0.10 ,担任请求处理服务器
nginx3:172.18.0.11 ,担任请求处理服务器
负载均衡的请求过程如下
在nginx1中负载配置:
# fuzai.conf 配置如下
# backend 为组名,组名设置在 proxy_pass http://backend; 语句
upstream backend {
server 172.18.0.10:81 weight=2;
server 172.18.0.11:81 weight=1;
}
server {
listen 80;
server_name local.fuzai.com;
location / {
proxy_pass http://backend;
}
}
nginx2中配置:
server {
listen 81;
server_name localhost;
root /var/www/html;
location / {
return 200 'i am nginx2';
}
}
nginx3中配置
server {
listen 81;
server_name localhost;
root /var/www/html;
location / {
return 200 'i am nginx3';
}
}
curl本地访问http://local.fuzai.com
,则会得到
root@db3f:/# curl local.fuzai.com
i am nginx2
root@db3f:/# curl local.fuzai.com
i am nginx2
root@db3f:/# curl local.fuzai.com
i am nginx3
root@db3f:/# curl local.fuzai.com
i am nginx2
root@db3f:/# curl local.fuzai.com
i am nginx2
root@db3f:/# curl local.fuzai.com
i am nginx3
至此,nginx简单的负载均衡,就完成了。
尾声
nginx的负载配置字段,可以参考 ngx_http_upstream_module
模块
负载均衡分发规则等等,具体可参考官方文档HTTP负载均衡。
负载均衡转发服务器中组中 server 172.18.0.10:81 weight=2;
,如果一台机子为多个负载请求处理服务器,则建议一个项目一个端口,否则无法区分不同项目(当然,你用域名后紧跟的目录区分除外,这也不科学),因为域名是解析到负载转发服务器上。所以,ip + 端口可以唯一区分项目。