Nginx+Tomcat+Redis实现负载均衡、资源分离、session共享
多个Tomcat负载均衡实例:可在服务器上复制出多个Tomcat分别修改Tomcat的
http访问端口(默认为8080端口)
Shutdown端口(默认为8005端口)
JVM启动端口(默认为8009端口)
1、Nginx实现多Tomcat负载均衡
Tomcat服务
127.0.0.1:6181;
127.0.0.1:5181;
127.0.0.1:8090;
Nginx配置
在nginx.conf中增加
upstreambackend {
server 127.0.0.1:6181;
server 127.0.0.1:5181;
server 127.0.0.1:8090;
}
server {
#nginx的端口
listen 6555;
#nginx ip地址 最后访问由此为入口并且加上应用名反向代理到server中的IP随机分配
server_name 127.0.0.1;
#将所有资源交给nginx代理
location / {
#代理转发域名与upstream后的一致
proxy_pass http://backend;
#参数off将在这个字段中禁止所有的proxy_redirect指令:
proxy_redirect off;
location/one/ { proxy_pass http://upstream:port/two/; proxy_redirect default;} location/one/ { proxy_pass http://upstream:port/two/; proxy_redirect http://upstream:port/two/ /one/;}
#配置主机ip和端口 ,非80端口需要配置端口号,避免重定向出问题
proxy_set_header Host $host:6555;
proxy_set_headerX-Real-IP $remote_addr;
#
后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_headerX-Forwarded-For $proxy_add_x_forwarded_for;
#
允许客户端请求的最大单文件字节数
client_max_body_size10m;
#
缓冲区代理缓冲用户端请求的最大字节数
client_body_buffer_size128k;
#nginx
跟后端服务器连接超时时间(代理连接超时,若配置多个tomcat,可将超时时间设置为1,即可通过当开启一台tomcat也可进行访问)
proxy_connect_timeout90;
#
后端服务器数据回传时间(代理发送超时)
proxy_send_timeout 90;
#
连接成功后,后端服务器响应时间(代理接收超时)
proxy_read_timeout 90;
#
设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffer_size 4k;
#proxy_buffers
缓冲区,网页平均在32k以下的设置
proxy_buffers 4 32k;
#
高负荷下缓冲大小(proxy_buffers*2)
proxy_busy_buffers_size64k;
#
设定缓存文件夹大小,大于这个值,将从upstream服务器传
proxy_temp_file_write_size64k;
}
}
upstream指定负载均衡组,指定其Tomcat成员
location指令将根目录目录下的静态文件交给Nginx来完成,Nginx支持只将请求的.do和静态资源交给Nginx实现静态分离,可通过正则表达式实现。
以上指令均可自由测试
proxy_redirect使用方式
语法:proxy_redirect [ default|off|redirectreplacement ]
默认值:proxy_redirect default
使用字段:http, server, location
如果需要修改从被代理服务器传来的应答头中的"Location"和"Refresh"字段,可以用这个指令设置。
假设被代理服务器返回Location字段为: http://localhost:8000/two/some/uri/
这个指令:
proxy_redirect http://localhost:8000/two/ http://frontend/one/;
将Location字段重写为http://frontend/one/some/uri/。
在代替的字段中可以不写服务器名:
proxy_redirect http://localhost:8000/two/ /;
这样就使用服务器的基本名称和端口,即使它来自非80端口。
如果使用“default”参数,将根据location和proxy_pass参数的设置来决定。
例如下列两个配置等效:
location /one/ { proxy_pass http://upstream:port/two/; proxy_redirect default;} location/one/ { proxy_pass http://upstream:port/two/; proxy_redirect http://upstream:port/two/ /one/;}
在指令中可以使用一些变量:
proxy_redirect http://localhost:8000/ http://$host:$server_port/;
这个指令有时可以重复:
proxy_redirect default; proxy_redirect http://localhost:8000/ /; proxy_redirect ; /;
参数off将在这个字段中禁止所有的proxy_redirect指令:
proxy_redirect off; proxy_redirect default; proxy_redirect http://localhost:8000/ /; proxy_redirect ; /;
利用这个指令可以为被代理服务器发出的相对重定向增加主机名:
2、Nginx+Tomcat+Redis实现session共享
Redis服务
localhost:6379
Tomcat服务
127.0.0.1:6181;
127.0.0.1:5181;
127.0.0.1:8090;
Nginx服务
配置所有Tomcat让其session保存到redis上,在context.xml配置(Value标签一定要在Manager标签前面):
Tomcat的lib需要导入
commons-pool2-2.0.jar
jedis-2.5.2.jar
tomcat-redis-session-manager1.2.jar (此包网上下载可能会有问题)
tomcat-util.jar
依次启动Redis、Tomcat、Nginx,访问Nginx(以下是nginx的启动和停止命令,由于无控制台查看,启动后请查看log下是否生成一份文件)