本次目的是使用Nginx负载均衡,下面开始记录过程以及发生的问题的解决:
准备最少2个Tomcat,2个Tomcat默认端口是8080,需要更改一个为其他端口
我这里是8080与8081,更改端口在conf目录下的server.xml中配置,端口,访问端口,端口。避免启动发送端口占用问题
启动Tomcat先测试访问:
访问1:
访问2:
准备工作完毕后,这就是2个服务者。当有客户来时,由这两个服务交替分担服务客户去
下载Nginx工具
在logs目录下,有2个日志需要注意:
一个Access成功访问日志,一个是error错误日志。启动出现错误,或是成功访问查看日志。在logs中
接下来如何配置呢?让Nginx管理我们的Tomcat去调度处理请求:
编辑conf目录下的nginx.conf文件,配置的有这样几个地方注意:
upstream test.com将Tomcat注册到Nginx容器中,test.com只是个名称。listen Nginx监听的端口,location /当出现请求,交给谁去处理。
什么是代理,在Java中有静态与动态代理。代理是在代码前后插入操作。帮你完成一些操作。proxy_pass,当有人来请求Nginx时,这时在这之前由谁去处理本次请求。按照url,进入到我们配置的服务池中,挑选服务来处理请求
在这个配置中,完成了这样的步骤:
1:按照url将服务注册到容器中,给容器取个名字便于引用
2:配置Nginx监听端口
3:配置请求时由谁来处理,填写容器的url,url是容器名字
中间这几句代码:
upstream test.com { #test.com是名字,随意取,容器内是n个服务对象,weight权重描述,越大服务被分配概率则越大
server 127.0.0.1:8080 weight=2;
server 127.0.0.1:8081 weight=1;
}
server {
listen 81; #监听端口
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location ~ .*\.(css|js|jpg|png)$ { #遇到资源时,处理的路径,经常发生404,配置进行处理
root /;
}
location / {
proxy_pass http://test.com; #当有人请求时,交与给谁处理?填写容器url,挑选服务进行处理
proxy_redirect default;
}
......................
配置到这里就可以了,start nginx.exe启动nginx。
启动后,在window任务管理区是管不掉,一次是启动2个,关闭一个,又打开。
关闭命令:taskkill /im nginx.exe /f
Linux可以尝试使用kill关闭,还未测试
访问Nginx监听的81端口,已经转到Tomcat为8080身上去处理了,资源全部请求成功,网站小图标因为没有
当我们多访问两次,就换了一个服务者来进行处理了
我这里将图片都放在了跟目录下的img上。因为配置时:
location ~ .*\.(css|js|jpg|png)$ {
root /;
}
有遇到这样的请求,转到/根目录下去,这样路径就是:
http://192.168.1.8:81/img/xxxxx.png
192.168.1.8:81,在收到请求时,被8080去处理了。url是:192.168.1.8:8080。
剩下的uri是:img/xxxxx.png,这个照片就符合conf的配置,进去根目录,按照img去img下找文件了。
为什么配个这?当url是:192.168.1.8:8080时,这个时候,如果我不配置/,那么就是相对路径,则去工程目录下找。
我的尝试是,在工程路径下找能找到,问题是,6个照片,每次请求,总会有1-2个照片404,刷新一次请求,之前404的照片就出来了。但其他的照片又404了。意思是,资源并没有完整的下载下来。配置在外面,去请求外部的资源,反而自己都请求到了。故有此一配。
其余就没啥了,Nginx。我们将服务注册进去,由这个容器,来决定由他里面的服务池,选谁来处理请求。这就是所谓的负载均衡。为啥需要这,因为一个服务器吃不住的时候,可以多个服务同时服务客户。那么这时候,大家都请求一个服务,由一个服务去告诉客户端去请求谁,将客户分担出去。分担处理减少压力。这就是负载均衡干的事情。合理的选择择优服务去处理。
有个问题是这样,如何保证处理者与客户端始终是一个呢?如果服务者不是一个,数据可能会乱掉。那就只有做标识了