Nginx+Tomcat 实现动态分离,负载均衡

什么是动静分离

为了提高网站的响应速度,减轻程序服务器(Tomcat,Jboss等)的负载,对于静态资源比如图片,js,css等文件,我们可以在反向代理服务器中进行缓存,这样浏览器在请求一个静态资源时,代理服务器就可以直接处理,而不用将请求转发给后端服务器。用户请求的动态文件比如servlet,jsp则转发给Tomcat,Jboss服务器处理,这就是动静分离。这也是反向代理服务器的一个重要的作用。

本文的动静分离主要是通过nginx+tomcat来实现,其中nginx处理图片、html、JS、CSS等静态文件,tomcat处理jsp、servlet等动态请求。

基础知识了解完后,咱们来具体实践一下动静分离的感觉。负载均衡在这篇博客就不在介绍了,但是同样会配置出来,实现动静分离和负载均衡的效果。

拓扑环境


服务器名称


系统版本


预装软件


IP地址


Nginx服务器


CentOS 7 最小安装


Nginx


192.168.22.228


Web服务器A


CentOS 7 最小安装


tomcat+jdk


192.168.22.229


Web服务器B


CentOS 7 最小安装


tomcat+jdk


192.168.22.230

Nginx服务器做负载均衡和动静分离,服务器A,B做集群。

前置条件

Nginx安装:http://blog.csdn.net/u010028869/article/details/50444801 
Tomcat安装配置:http://blog.csdn.net/u010028869/article/details/50379304 
负载均衡实现:http://blog.csdn.net/u010028869/article/details/50485245

建立JSP动态页面

<%@ page language="java" contentType="text/html; charset=GB18030"

pageEncoding="GB18030"%>

<HTML>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=GB18030">

<title>Nginx动静分离测试</title>

</head>

<body>

<h1>您正在访问:192.168.22.229</h1>

<img src="/drp/img/girl.jpg"  alt="女孩" />

</body>

</html>

Jsp放到drp目录中,添加一个图片标签,加载Tomcat根目录下 webapps/drp/img/girl.jpg图片文件。启动Tomcat测试是否能够访问。

浏览器输入网址:http://192.168.22.229:8080/drp/index.jsp

在228服务器上同样建立上述文件和目录,不在叙述。

对Nginx进行配置

通过配置location,对访问的请求进行拦截,①②都需要配置。

全部的请求均转发给Tomcat进行处理

location / {

proxy_next_upstream http_502 http_504 error
timeout invalid_header;

proxy_pass http://mycluster;

# 真实的客户端IP

proxy_set_header   X-Real-IP        $remote_addr;

# 请求头中Host信息

proxy_set_header   Host             $host;

# 代理路由信息,此处取IP有安全隐患

proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

# 真实的用户访问协议

proxy_set_header   X-Forwarded-Proto $scheme;

}

个别的请求比如:htmljscss等静态资源请求,由Nginx进行处理

#静态文件交给nginx处理

location ~ .*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$

{

root /usr/local/webapps;

expires 30d;

}

#静态文件交给nginx处理

location ~
.*\.(js|css)?$

{

root /usr/local/webapps;

expires 1h;

}

root
/usr/local/webapps;
 这段代码的意思是指定Nginx访问的目录,即静态资源所在的目录。

expires 30d; 指定这些资源文件在客户端浏览器的缓存时间。30d指的是30天,1h指的是1小时。

完整的Nginx配置文件

user nobody;

worker_processes 2;

events{

worker_connections 1024;

}

http{

#设置默认类型为二进制流

default_type   
application/octet-stream;

server_names_hash_bucket_size   128;

#指定来自客户端请求头的headerbuffer大小,设置为32KB

client_header_buffer_size   32k;

#指定客户端请求中较大的消息头的缓存最大数量和大小,这里是4个32KB

large_client_header_buffers 4 32k;

#上传文件大小

client_max_body_size 356m;

#nginx的HttpLog模块指定,指定nginx日志的输出格式,输出格式为access

log_format access ‘$remote_addr - $remote_user [$time_local] "$request" ‘

‘$status $body_bytes_sent "$http_referer" ‘

‘"$http_user_agent" "$http_x_forwarded_for"‘;

#access日志存在未知

access_log  /var/log/nginx/access.log   access;

#开启高效模式文件传输模式,将tcp_nopush和tcp_nodelay两个指另设置为on,用于防止网络阻塞。

sendfile    on;

tcp_nopush  on;

tcp_nodelay on;

#设置客户端连接保持活动的超时时间

keepalive_timeout   65;

server_tokens   off;

#客户端请求主体读取缓存

client_body_buffer_size 512k;

proxy_connect_timeout   5;

proxy_send_timeout      60;

proxy_read_timeout      5;

proxy_buffer_size       16k;

proxy_buffers           4 64k;

proxy_busy_buffers_size 128k;

proxy_temp_file_write_size 128k;

#开启gzip

gzip    on;

#允许压缩的最小字节数

gzip_min_length 1k;

#4个单位为16k的内存作为压缩结果流缓存

gzip_buffers 4 16k;

#设置识别HTTP协议版本,默认是1.1

gzip_http_version 1.1;

#gzip压缩比,可在1~9中设置,1压缩比最小,速度最快,9压缩比最大,速度最慢,消耗CPU

gzip_comp_level 2;

#压缩的类型

gzip_types text/plain
application/x-javascript text/css application/xml;

#让前端的缓存服务器混村经过的gzip压缩的页面

gzip_vary   on;

upstream mycluster{

server 192.168.22.229:8080 weight=1;

server 192.168.22.230:8080 weight=1;

}

server{

listen 8088;

server_name 192.168.22.228;

charset    utf-8; #设置编码为utf-8;

#location / {

#    root   html;

#    index  index.html index.htm;

#}

#location ~ .*\.(jsp|do|action)$

location / {

proxy_next_upstream
http_502 http_504 error timeout invalid_header;

proxy_pass
http://mycluster;

# 真实的客户端IP

proxy_set_header   X-Real-IP        $remote_addr;

# 请求头中Host信息

proxy_set_header   Host             $host;

# 代理路由信息,此处取IP有安全隐患

proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

# 真实的用户访问协议

proxy_set_header   X-Forwarded-Proto $scheme;

}

#静态文件交给nginx处理

location ~ .*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$

{

root  /usr/local/webapps;

expires 30d;

}

#静态文件交给nginx处理

location ~ .*\.(js|css)?$

{

root /usr/local/webapps;

expires 1h;

}

error_page   500 502 503 504  /50x.html;

location = /50x.html {

root   html;

}

}

}

测试Nginx动静分离

根据上述配置文件,完成动静分离和负载均衡的配置,然后启动Nginx。 
访问网址:http://192.168.22.228:8088/drp/index.jsp

可以看到图片没有加载出来。这是因为静态资源访问请求已经被Nginx拦截,由Nginx进行处理。但是Nginx服务器的 /usr/local/webapps 目录下并没有图片资源,所以图片没有加载出来。index.jsp页面能够显示,说明动态的请求已经转发到了Tomcat,Tomcat对index.jsp进行了解析。

在Nginx服务器 /usr/local/webapps 目录下放置图片文件,将tomcat上drp整个目录拷贝到其中。

然后再次刷新浏览器,图片能够正常显示。

小结

从上述的实例可以看到已经初步实现了Nginx动静分离的功能,在配置动静分离后,用户请求你定义的静态资源,默认会去nginx的发布目录请求,而不会到后端请求,这样可以提高网站响应速度,减轻真实Web服务器的负载压力。

不过在开发环境下,为了便于开发,咱们的静态资源和代码还是放在一起的,等开发测试完成,才会将完成的完整程序部署到生成环境上,然而程序代码和静态资源是分别放置到不同的服务器上的。

重启Nginx

service nginx restart
/etc/init.d/nginx stop
/etc/init.d/nginx start

原文地址:https://www.cnblogs.com/wangchaonan/p/10731362.html

时间: 2024-11-13 06:36:17

Nginx+Tomcat 实现动态分离,负载均衡的相关文章

Nginx + Tomcat Windows下的负载均衡配置

一.为什么需要对Tomcat服务器做负载均衡?    Tomcat服务器作为一个Web服务器,其并发数在300-500之间,如果超过500的并发数会出现Tomcat不能响应新的请求的情况,严重影响网站的运行.同时如果访问量非常大的情况下,Tomcat的线程数会不断增加.因此会占据大量内存,严重时出现内存溢出的现象,这时需要重启Tomcat以释放内存,阻断了网站的运行.    所以对Tomcat做负载均衡便很有必要.目前可以和Tomcat做负载均衡的主流服务器是Apache,但是Nginx由于功能

nginx tomcat 集群与负载均衡配置实例

一.nginx tomcat 中用到的概念介绍 1.反向代理,当客户端的请求到来之后,反向代理接收这个请求然后将这个请求转发到后台的服务器上,如果做负载均衡的话,就会将这个请求分发到负载均衡的那些服务器上去. 正向代理端代理的是客户端 反向代理代理的是服务端.请求这个反向代理服务器,就好比是直接请求资源所在的服务端. 2.这里说到的负载均衡,就是nginx接收到客户端的请求之后将这些请求按照自己配置的方式分发给后台服务器(tomcat服务器),分发方式有轮回方式,weight 配置权重,权重越大

图文解说:Nginx+tomcat配置集群负载均衡

开发的应用采用F5负载均衡交换机,F5将请求转发给5台hp unix服务器,每台服务器有多个webserver实例,对外提供web服务和socket等接口服务.之初,曾有个小小的疑问为何不采用开源的apache.Nginx软件负载,F5设备动辄几十万,价格昂贵?自己一个比较幼稚的问题,后续明白:F5是操作于IOS网络模型的传输层,Nginx.apache是基于http反向代理方式,位于ISO模型的第七层应用层.直白些就是TCP UDP 和http协议的区别,Nginx不能为基于TCP协议的应用提

Nginx+tomcat配置集群负载均衡

转自:http://blog.csdn.net/bruce_6/article/details/38228299 相信很多人都听过nginx,这个小巧的东西慢慢地在吞食apache和IIS的份额.那究竟它有什么作用呢?可能很多人未必了解. 说到反向代理,可能很多人都听说,但具体什么是反向代理,很多人估计就不清楚了.摘一段百度百科上的描述: 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回

转】Nginx+tomcat配置集群负载均衡

原博文出自于:http://blog.csdn.net/bruce_6/article/details/38228299         感谢! 相信很多人都听过nginx,这个小巧的东西慢慢地在吞食apache和IIS的份额.那究竟它有什么作用呢?可能很多人未必了解. 说到反向代理,可能很多人都听说,但具体什么是反向代理,很多人估计就不清楚了.摘一段百度百科上的描述: 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务

Windows下用Nginx+Tomcat配置集群负载均衡

Nginx是一款轻量级的web服务器/反向代理服务器,更详细的释义自己百度了.目前国内像新浪.网易等都在使用它.先说下我的服务器软件环境: 系统:windows_server_2008_standard_enterprise_and_datacenter_with_sp2_x64 当前运行的Tomcat:非安装版本Tomcat 6.0.36 就说这两个关键的吧,目前遇到的问题是访问量剧增单个tomcat已无力负载了,经常出现超时的情况.于是就计划用nginx布置负载均衡,网络上查到的资料多是介绍

nginx+tomcat实现简单的负载均衡

host1:10.0.0.10(部署nginx和tomcat) host2:10.0.0.11(部署tomcat) 平台环境(2主机一样) [[email protected] ~]# uname -r3.10.0-862.el7.x86_64[[email protected] ~]# cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) host1及host2上操作: 安装tomcat https://www.cnblogs

【Linux运维-集群技术进阶】Nginx+Keepalived+Tomcat搭建高可用/负载均衡/动静分离的Webserver集群

额.博客名字有点长.. . 前言 最终到这篇文章了,心情是有点激动的. 由于这篇文章会集中曾经博客讲到的全部Nginx功能点.包含主要的负载均衡,还有动静分离技术再加上这篇文章的重点.通过Keepalived实现的HA(High Available).为什么要实现高可用呢?曾经在搭建的时候仅仅用了一台Nginxserver,这种话假设Nginxserver宕机了,那么整个站点就会挂掉.所以要实现Nginx的高可用,一台挂掉还会有还有一台顶上去.从而保证站点能够持续的提供服务. 关于负载均衡和动静

nginx反向代理tomcat集群达到负载均衡,同时使用proxy_cache做web缓存

Nginx最早是作为一款优秀的反向代理软件,以高并发下的卓越性能被越来越多的用户所用户,国内最早研究nginx的是张宴,该大牛的博客地址:http://zyan.cc/ .但是随着需求的发展,nginx的功能已经不再单单是反向代理,现在已经更倾向作为web容器. Nginx从0.7.48版本开始,支持了类似Squid的缓存功能.Nginx的Web缓存服务主要由proxy_cache相关指令集和fastcgi_cache相关指令集构成,前者用于反向代理时,对后端内容源服务器进行缓存,后者主要用于对