最近项目不忙就考虑把现有的单点系统应用增加成多节点应用,就考虑到采用nginx做负载均衡,记录下来配置的过程
nginx安装
1 windows下安装nginx(此处只写windows下,linux下略网上很多就不再写了)
下载nginx http://nginx.org/en/download.html
解压完成:
2 启动关闭常用命令
进入命令行:cmd 进入到nginx的安装目录
start nginx : 启动nginx
nginx -s reload :修改配置后重新加载生效
nginx -s reopen :重新打开日志文件
nginx -t -c /path/to/nginx.conf 测试nginx配置文件是否正确
关闭nginx:
nginx -s stop :快速停止nginx
nginx -s quit :完整有序的停止nginx
二: nginx负载均衡配置
1 准备两个tomcat,分别端口设置为8081和8082(具体端口设置略过)
2 到nginx的安装目录,修改nginx.conf文件做负载配置(配置如下两个地方就可以)
至此 我们nginx负载就配置完成了,分别启动两个tomcat ,启动nginx,访问就可以了
三 负载均衡后遇到的问题
1 文件上传下载问题
假如我上传图片时候,正好调用的是81端口的项目,那么文件就上传到81服务器上去了,在我访问的时候,分配到82 服务器,这样就导致文件无法展示,针对此问题有几种处理方案:
A 做文件服务器,所有的应用公用文件服务器,上传下载都指向该文件服务器
B 通过nginx配置 使得上传下载都指向同一台服务器上去(这种方式最简单,但是这种方式不能实现完全的负载)
这里介绍B方案的配置如下:
2 Session问题
当负载后 我们的应用部署在不同的机器上,每一次请求随机分配到不同的服务器,这样导致访问81机器后,下一访问 会分配到82机器上,这样与81建立的session在82机器上就不能使用了
解决方案:
A 使用readis 将session 缓存到独立的readis服务器
B session保存到数据库中
C 采用ngin的配置,使用ip_hash配置,保证同一个ip请求落在同一台服务器上
C方案的nginx配置如下: