Nginx+Tomcat搭建静态资源服务器/负载均衡集群

一、软件环境

Linux(CentOS 7)
nginx1.17.0(PCRE、openssl等依赖自动装配)
tomcat8.5.5

二、项目架构

在这里插入图片描述
说明:大体思路就是多个tomcat指向同一个源码运行。所有客户端请求首先到达Nginx,再由 Nginx 根据提前配置好的转发规则,将请求转发到某一个 Tomcat 上去,实现负载均衡;同时Nginx也作为静态资源服务器,客户端对于静态资源的获取直接通过nginx来获取,减轻了tomcat对于静态资源的重复解析

三、部署配置实现

1、环境搭建(CentOS 7)

(1)安装nginx
安装编译工具、库文件和依赖:

yum -y install make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel

yum -y install pcre-devel

安装Nginx

wget http://nginx.org/download/nginx-1.17.0.tar.gz

tar zxvf nginx-1.17.0.tar.gz

cd nginx-1.17.0/

./configure

make

make install

安装完成查看nginx版本(nginx默认的安装目录为/usr/local/nginx/

cd /usr/local/nginx/sbin/

./nginx –v

返回:nginx version: nginx/1.17.0
启动 Nginx :

./nginx

Nginx 启动成功之后,在浏览器中直接访问 Nginx 地址(/路径):
在这里插入图片描述
看到如上页面,表示 Nginx 已经安装成功了。

(2)部署两个tomcat
下载

wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.50/bin/apache-tomcat-8.5.50.tar.gz

移动到一个空目录下,解压Tomcat并复制一份,分别命名为tomcat8-ng-1和tomcat8-ng-2,再创建一个同级目录用来存放源码(按照自己要运行的工程来存放,我这里存放了一个目录名为trunk的web工程),目录结构如下:
在这里插入图片描述
修改两个tomcat的server.xml(/conf/server.xml)
tomcat8-ng-1/server.xml

...
<Server port="18006" shutdown="SHUTDOWN">
...
<Connector port="18080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
...
<Connector port="18009" protocol="AJP/1.3" redirectPort="8443" />
...
<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">
	<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" />
	<Context path="" docBase="/root/2019dev/toolbook-nginx/resource/trunk" />
</Host>

tomcat8-ng-2/server.xml

...
<Server port="28006" shutdown="SHUTDOWN">
...
<Connector port="28080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
...
<Connector port="28009" protocol="AJP/1.3" redirectPort="8443" />
...
<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">
	<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" />
	<Context path="" docBase="/root/2019dev/toolbook-nginx/resource/trunk" />
</Host>

分别启动两个tomcat查看工程是否成功启动

因为我Context 中path配置为""把该工程作为Root Context使用,所以/直接指向该工程
在这里插入图片描述
在这里插入图片描述

2、配置nginx

进入nginx安装目录下的conf目录

cd /usr/local/nginx/conf/

修改nginx.conf(记得修改系统文件前先备份)

这里我们将集群和server配置独立出来,通过nginx的include将其包含进主配置文件中includevhost/toolbook.conf
为了让启动用户和nginx工作用户一致所致,我们这里在nginx.conf第一行添加user root

user  root;
worker_processes  1;#工作进程的个数,一般与计算机的cpu核数一致
 
events {
    worker_connections  1024;#单个进程最大连接数(最大连接数=连接数*进程数)
}
 
http {
    include       mime.types; #文件扩展名与文件类型映射表
    include vhost/toolbook.conf;
    default_type  application/octet-stream;#默认文件类型
 
    sendfile        on;#开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。
    
	keepalive_timeout  65; #长连接超时时间,单位是秒
 
    gzip  on;#启用Gizp压缩
}

在conf目录下创建vhost目录,并创建toolbook.conf文件
toolbook.conf

这里说明两点:
(1)由于我的web工程的登陆使用session记录用户信息,而nginx默认的负载均衡策略为’轮询’,即每个请求按时间顺序逐一分配到不同的后端服务器,这时便会出现A用户登陆系统,nginx把A用户的登陆请求分发给了s1服务器,此时s1服务器上就会记录A用户登陆的session信息,登陆成功后,当A用户访问受保护资源,这时候这个请求经过nginx反向代理服务器的时候,负载均衡机制根据当前集群中的各个服务器的压力性能等情况可能把请求分发给了s2服务器处理,可是A用户的session保存在了s1服务器上,造成再s2服务器上请求验证状态找不到对应的session,就会认为用户未登录而做的异常操作,实现session负载均衡的方式有很多种(比如session存在数据库mysql,session存在缓存memcache或者redis中,ip_hash等等),这里我们采用nginx提供的ip_hash负载均衡策略upstream {ip_hash;}当某个ip下的客户端请求指定的服务器(nginx根据IP地址计算出一个hash值,根据hash值来判断分配给那台服务器,从而每次该ip请求都分配到指定的服务器),这样就可以保证有状态请求的状态的完整性,避免了session信息丢失的问题
(2)这里我们将nginx作为一个静态资源服务来使用,将工程中的静态资源由nginx直接返回给客户端,而不经过tomcat的解析location ~ \.(css||jpg||gif||png||html||eot||svg||ttf||woff||ico||woff2)$ {root /root/2019dev/toolbook-nginx/resource/trunk/WEB-INF/classes/static; },注意nginx会把配置路径作为根路径来获取资源(ps:http://http://192.168.4.156:28080/image/bgis.png对应服务器的/root/2019dev/toolbook-nginx/resource/trunk/WEB-INF/classes/static/image/bgis.png)

upstream toolbook{	#服务器集群名字
    server 172.16.0.6:18080;
    server 172.16.0.6:28080;
	ip_hash;
}

server {
        listen       80;
        server_name  toolbook;##############	当前服务的域名

		location / {
			proxy_pass   http://toolbook;##############	集群名称
		} 
        location ~ \.(css||jpg||gif||png||html||eot||svg||ttf||woff||ico||woff2)$ {
            root   /root/2019dev/toolbook-nginx/resource/trunk/WEB-INF/classes/static;
        }
    }

重新加载配置文件

cd /usr/local/nginx/sbin/

./nginx -s reload

测试浏览器访问http://xxx.xxx.xxx.xx/login
在这里插入图片描述
登陆
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值