Nginx负载均衡
默认配置,tomcats有n个,请求就被平均分配到这n个服务器上。请求次数%n,平均分配到每个服务器。
例子:3个tomcat
修改3个端口,在同一台服务器上启动3个tomcat。每个tomcat下放一个index.html。然后内容修改,分别展示T1,T2,T3。当请求nignx,通过这种方法验证得出默认nginx轮询这3个页面,但顺序不一定是配置的顺序。
#前台,有3个tomcat集群,用户访问时轮询转向到某一个tomcat
server {
listen 80;
server_name www.jt.com;
location / { #拦截所有的资源
proxy_pass http://jt_tomcats; #引用定义的upstream
}
}
#配置一个upstream,声明一个名称jt_tomcats,配置多个ip地址转向,默认就是轮询。
upstream jt_tomcats {
server 127.0.0.1:8080;
server 127.0.0.1:8090;
server 127.0.0.1:8100;
}
轮询方式存在问题:服务器有性能比较好的,有性能比较差的。新的服务器的配置比旧的服务器强悍很多。CPU核也多,内存也大,硬盘容量也大,速度还快。
如果还使用轮询的方式,就会造成新服务器资源的浪费,旧的服务器资源压力大。显然资源分配不合理,应该多劳多得。
权重
#前台,有3个tomcat集群,用户访问时轮询转向到某一个tomcat
server {
listen 80;
server_name www.jt.com;
location / { #拦截所有的资源
proxy_pass http://jt; #引用下面定义的upstream
}
}
#配置一个upstream,声明一个名称jt,配置多个ip地址转向,默认就是轮询
upstream jt {
server 127.0.0.1:8080 weight=8; #访问请求分成9份,这个tomcat负责8份的链接
server 127.0.0.1:8090 weight=1; #访问请求分成9份,这个tomcat负责1份的链接
server 127.0.0.1:8100 down; #这个tomcat暂时不参加负载
}
配置nginx,修改conf/nginx.conf文件
例子:
server {
listen 80;
server_name manage.jt.com;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location / {
proxy_pass http://127.0.0.1:8081;
proxy_connect_timeout 600;
proxy_read_timeout 600;
}
}
在此配置文件中,被nginx映射到127.0.0.1:8082。导致后台在获取域名时,拿到的实际是127.0.0.1映射后的地址。未解决这个问题,增加个头信息。在此配置文件中添加如下
proxy_set_header Host $host;
它是个变量名,它就能获得请求的域名。在tomcat中就可以获得这个头信息中的域名。当后台程序需要获得请求的域名时,Nginx重新映射了。
浙公网安备 33010602011771号