Nginx反向代理、负载均衡实现Tomcat集群

来源:互联网 发布:mac ps怎么导入照片 编辑:程序博客网 时间:2024/05/21 11:24

写在前面

在Linux下,使用Nginx的反向代理、负载均衡,可以增强服务器主机CPU的利用率,提交系统的并发量,加大系统的稳定性(一台Tomcat出现问题了,还有其他Tomcat支撑着系统的运行),同时使用Redis可以解决多台Tomcat之间Session和文件共享的问题,从而实现Tomcat集群的搭建。

配置环境:Centos6.5,Tomcat8.0+Jdk1.8+Redis-4.0.5+Nginx-1.12

文章对多台Tomcat共存、Nginx安装配置、Nginx实现集群以及Session、文件共享、Tomcat集群配置二级域名等方面做了说明。若未安装Redis,需先安装Redis。

准备Tomcat

官网下载 tomcat.tar.gz 并上传到服务器上。

解压:tar -vxf tomcat.tar.gz
解压两次获得两台Tomcat,修改端口,确保两台Tomcat对应的端口不冲突。

tomcat8.0.1端口:

tomcat8.0.2端口:

更改完端口后启动Tomcat,并测试能够正常访问,此时可以发现访问项目时得到的Session是不一样的。


Nginx的安装

Nginx下载:Nginx官网
1.说明:Nginx官网下载下来的是源码,Nginx的编译需要c++,同时prce(重定向支持)和openssl(https支持)也需要安装。因此安装Nginx之前需要在linux上先安装对应的环境。
[root@admin home]# yum install gcc-c++  [root@admin home]# yum -y install pcre*  [root@admin home]# yum -y install openssl* 
2.解压及编译
[root@admin home]# tar -zxvf nginx-1.12.2.tar.gz 
3.进入Nginx目录:
cd nginx-1.12.2
4.设置安装目录为/usr/local/nginx:
./configure --prefix=/usr/local/nginx
5.编译和安装:
[root@admin nginx-1.12.2]# make  [root@admin nginx-1.12.2]# make install  
6.启动nginx服务,进入安装目录 /usr/local/nginx
[root@admin home]# cd /usr/local/nginx/sbin  [root@admin sbin]# ./nginx 
通过ip访问,若出现Welcome欢迎页面,则表示安装成功。停止服务命令:killall nginx

配置Nginx

vim更改配置文件nginx/conf/nginx.conf
#user  nobody;worker_processes  1;#error_log  logs/error.log;#error_log  logs/error.log  notice;#error_log  logs/error.log  info;#pid        logs/nginx.pid;events {    worker_connections  1024;}http {    include       mime.types;    default_type  application/octet-stream;    include  /usr/local/nginx/conf/sites-enabled/*.conf; #加载配置文件,设置二级域名时使用    sendfile        on;    keepalive_timeout  65;    upstream project_nginx{        #服务器配置,weight越大越有机会被访问到,15秒内出现3次错误,接        #下来30s内不再去访问该服务器        server 127.0.0.1:8080 weight=1 max_fails=3 fail_timeout=30s;        server 127.0.0.1:8081 weight=1 max_fails=3 fail_timeout=30s;    }    server {        listen       80;        server_name  域名;        charset utf-8;        #charset koi8-r;        access_log logs/host_access.log;        error_log logs/host_error.log;        location / {            proxy_set_header  Host $host:80; #端口跟上面的一致            proxy_set_header  REMOTE-HOST $remote_addr;            proxy_set_header  X-Real-IP $remote_addr;            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;             proxy_pass  http://project_nginx;        }                error_page   500 502 503 504  /50x.html;        location = /50x.html {            root   html;        }    }}
修改完配置后,重启Nginx,测试。


从图中可以发现,Nginx将访问随机代理给了服务器,但访问项目得到的Session依旧还是不一样的。

Redis实现Session共享

1.说明:案例用的是Tomcat8.0,不同的Tomcat版本会有不同的jar包,这里提供Tomcat8.0版本jar包的下载。将jar包移动到Tomcat安装的目录的lib文件夹下(2台Tomcat都需要进行此操作)。
该实现方式支持在一台主机,多台Tomcat的环境下实现Session共享,对于多台主机,多台tomcat并不适合。
2.下载:Redis实现Session共享所需Jar
3.修改配置:
<Valve className="com.demo.redis_session.RedisSessionHandlerValve" /><Manager className="com.demo.redis_session.RedisSessionManager"         host="127.0.0.1"         port="6379"          database="0"         maxInactiveInterval="60" />
两台服务器配置完成后要记得重启,之后测试可发现,Nginx将访问随机代理给了服务器,得到的Session是一样的,清除Session时也是同时的,这样便实现了集群共享Session。

软链接实现文件共享

1.说明:此文件共享只在一台主机多个Tomcat情况下使用,不适合多台主机。
2.软链接实现:
ln -s /home/tomcat8.0.1/webapps/project/upload/ /home/tomcat8.0.2/webapps/project/
这里假设upload为文件上传文件夹,Tomcat8.0.1要存在upload文件夹,Tomcat8.0.2不需要upload文件夹,tomcat8.0.2使用软链接生成upload文件夹,类似于window系统下的快捷方式。也就是在Tomcat8.0.2下访问upload其实是访问Tomcat8.0.1下的upload文件夹。

在tomcat8.0.2/conf目录下修改context.xml,在<context></context>节点之间增加配置:
<Resources allowLinking="true" />
别忘了重启服务器,此时便实现了文件共享。

说说Tomcat集群配置二级域名

1.配置两台Tomcat的server.xml虚拟目录,在<Engine></Engine>结点之间配置虚拟主机
<Host name="二级域名"  appBase="webapps"      unpackWARs="true" autoDeploy="true"      xmlValidation="false" xmlNamespaceAware="false">      <Alias>二级域名</Alias>      <Context path="" docBase="qgzx" reloadable="true"></Context></Host>
2.配置Nginx虚拟目录,更改配置文件nginx/conf/nginx.conf,在http{}下加载二级域名的配置文件目录。
include  /usr/local/nginx/conf/sites-enabled/*.conf; #加载配置文件,设置二级域名时使用#include:表示请求时会将/usr/local/nginx/conf/sites-enabled 目录下的文件加载进来#若没目录,则mkdir手动创建对应的目录
3.编写配置文件 demo_name.conf
upstream demo_nginx{     #服务器配置,weight越大越有机会被访问到,15秒内出现3次错误,接     #下来30s内不再去访问该服务器     server localhost:8080 weight=1 max_fails=3 fail_timeout=30s;     server localhost:8081 weight=1 max_fails=3 fail_timeout=30s;}server {     listen       80;     server_name  二级域名;  #跟tomcat配置时的二级域名一样     charset utf-8;     access_log logs/name_access.log;     error_log logs/name_error.log;     location / {         proxy_set_header  Host $host:80; #端口跟上面的一致         proxy_set_header  REMOTE-HOST $remote_addr;         proxy_set_header  X-Real-IP $remote_addr;         proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;         proxy_pass  http://demo_nginx;     }}
别忘了重启Nginx。

最后再说说

到此,便实现了Nginx的反向代理、负载均衡,Tomcat配置服务器集群,Session和文件共享以及集群下二级域名的配置。文章的具体细节如有问题,欢迎指出,以便一同探讨和学习,十分感谢。
原创粉丝点击