apache + tomcat动静分离配置

环境说明

线上环境使用apache+tomcat的形式部署应用程序,前端使用apache监听80端口,后端使用tomcat部署应用。tomcat的静态资源响应能力和并发处理能力均不如apache,经测试,apache响应静态资源的速度比tomcat快10%左右。

因此,有必要减轻一下tomcat的负载,获得更高的性能。基本思路就是将静态资源交给apache响应,动态资源交给tomcat,下面贴出配置以及解说。

配置总览

<LocationMatch "/app/(static/)?(css|flash|images|img|js)">
    ProxyPassMatch !
    <IFModule mod_headers.c>
        Header set Cache-Control "max-age=604800"
    </IFModule>
</LocationMatch>

FileEtag None

Alias /app/static /var/lib/tomcat7/webapps/app
Alias /app /var/lib/tomcat7/webapps/app
<Directory "/var/lib/tomcat7/webapps">
    AllowOverride None
    Require all granted                                #apache2.4的配置,注意2.2可能不识别这个,需要改为
                                                                #Order Allow,Deny
                                                                #Allow From All
</Directory>

ProxyRequests off                                      #开启反向代理
ProxyPass /app ajp://127.0.0.1:8009/app    #访问ajp协议时无需ProxyPassReverse

Apache和Tomcat的配置及说明

需要说明的是,这个反向代理使用了apache的模块proxy_ajp,并没有使用http反向代理。开启这个模块需要在apache的配置文件中加上

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

ubuntu下安装的apache直接使用命令a2enmod proxy_ajp即可

使用ajp做反向代理的原因主要有两个,一个是proxy_ajp是apache的内置模块,使用配置方便,而且性能稳定,无需安装第三方模块。第二个是apache和tomcat都是自家产品,整合起来方便,稳定性高,而且tomcat的文档中也是推荐使用ajp协议反向代理的。

在tomcat中需要开启ajp端口,找到tomcat的server.xml中的AJP关键字,修改配置如下:

<Connector address="127.0.0.1" port="8009" URIEncoding="UTF-8" protocol="AJP/1.3" />

打开AJP端口,如果无需对外可以只监听127.0.0.1. 这样apache就可以通过ProxyPass访问到ajp://127.0.0.1:8009。

tomcat存放静态资源的目录一般固定,所以反向代理配置还是很容易的,使用LocationMatch用正则同时匹配多个静态资源的目录即可,使用Alias定义路径别名,别忘了使用Directory配置段让apache具有对目录的访问权限。

apache对静态资源处理很强大,可以稍微改一下静态资源的响应,让访问性能提升。修改响应headers需要加载headers模块。

LoadModule headers_module modules/mod_headers.so

ubuntu下安装的apache使用命令a2enmod headers即可。

让浏览器缓存静态资源,对静态资源加上Cache-Control "max-age=604800",告诉浏览器将静态资源在本地缓存一周。

FileEtag None告诉apache关闭Etag,apache会默认对静态资源加上Etag头,但是这个头通常是不推荐使用的,我记得以前在哪本资料上看到过,说是雅虎的前端工程师们一致认为不使用ETag比较好,虽然ETag计算文件的变化更准确一些,但是会有一些问题,因为ETag是文件修改时间以及inode号之类的参数计算得到,会带来额外的负载。而且在CDN加速时,由于CDN上的inode和服务器不一致,导致CDN上ETag和服务器不同而缓存失效。所以通常情况下是不推荐使用ETag的,精确到秒级别的Last-Modified一般足够使用了,一秒内多次修改静态资源的几率并不高。

最终结果测试

最后,重启apache生效,看一下最终结果:

直接访问,可以看到静态资源都是(from cache)

F5刷新,可以看到静态资源都是304

CTRL+F5强制刷新,看一下静态资源的响应头

修改响应头信息有效,带上了Cache-Control,同时apache也自动为静态资源加上了Last-Modified,同时删掉了ETag,静态资源缓存成功。

再看一下tomcat的accesslog

192.168.1.45 - - [27/Oct/2014:09:56:55 +0800] "GET /app/customer/list HTTP/1.1" 200 29733
192.168.1.45 - - [27/Oct/2014:10:05:26 +0800] "GET /app/user/preChangePwd HTTP/1.1" 200 17140
192.168.1.45 - - [27/Oct/2014:10:05:29 +0800] "GET /app/user/showOrgInfo HTTP/1.1" 200 14318
192.168.1.45 - - [27/Oct/2014:10:05:32 +0800] "GET /app/customer/list HTTP/1.1" 200 29733
192.168.1.56 - - [27/Oct/2014:10:09:50 +0800] "GET /app/configuration/showConfigHistory HTTP/1.1" 200 17279
192.168.1.17 - - [27/Oct/2014:10:10:14 +0800] "GET /app/desktop HTTP/1.1" 302 -
192.168.1.17 - - [27/Oct/2014:10:10:14 +0800] "GET /app/auth/login HTTP/1.1" 200 11187
192.168.1.34 - - [27/Oct/2014:10:10:54 +0800] "GET /app/auth/login HTTP/1.1" 200 11187
192.168.1.34 - - [27/Oct/2014:10:10:59 +0800] "GET /app/auth/login HTTP/1.1" 200 11187
192.168.1.34 - - [27/Oct/2014:10:20:44 +0800] "GET /app/auth/login HTTP/1.1" 200 11187
192.168.1.34 - - [27/Oct/2014:10:20:46 +0800] "GET /app/auth/login HTTP/1.1" 200 11187
192.168.1.34 - - [27/Oct/2014:10:20:51 +0800] "GET /app/auth/login HTTP/1.1" 200 11187
192.168.1.34 - - [27/Oct/2014:10:21:04 +0800] "GET /app/auth/login HTTP/1.1" 200 11187
192.168.1.34 - - [27/Oct/2014:10:22:57 +0800] "GET /app/auth/login HTTP/1.1" 200 11187
192.168.1.34 - - [27/Oct/2014:10:23:50 +0800] "GET /app/auth/login HTTP/1.1" 200 11187

可以看到已经没有静态资源的请求信息了,动静分离成功!

时间: 2024-08-25 06:21:43

apache + tomcat动静分离配置的相关文章

nginx 的动静分离配置(tomcat)

nginx+tomcat是想动静分离配置 首先在nginx的配置文件中添加tomcat的的集群配置 upstream tomcats { ip_hash; server 192.168.0.251:8080; server 192.168.0.252:8081; server 192.168.0.253:8082; } 这里的算法自己定义 location proxy_set_header $host proxy_set_header XRealIP $remote_addr proxy_set

Nginx系列-8.配置Nginx+Apache实现动静分离

Nginx系列-8.配置Nginx+Apache实现动静分离 目录 - Nginx系列 Nginx系列-1.Linux下安装Nginx Nginx系列-2.配置LNMP(Linux.Nginx.MySQL.PHP)架构 Nginx系列-3.配置Nginx虚拟主机 Nginx系列-4.Nginx日志配置及日志切割 Nginx系列-5.配置Nginx的防盗链 Nginx系列-6.配置Nginx的HTTPS Nginx系列-7.配置Nginx使用uwsgi支持web.py框架 Nginx系列-8.配置

Nginx+Tomcat动静分离架构

Nginx+Tomcat动静分离架构 Nginx+tomcat是目前主流的java web架构,Nginx动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离.严格意义上说应该是动态请求跟静态请求分开,可以理解成使用Nginx处理静态页面,Tomcat.Resin出来动态页面. 动静分离从目前实现角度来讲大致分为两种,一种是纯粹的把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案:另外一种方法就是动态跟静态文件混合在一起发布,通过ngin

Docker构建Nginx+Tomcat动静分离架构

随着主流Nginx WEB服务器的发展,现在基于Nginx的WEB服务器已广泛应用于各大互联网企业.今天我们来使用docker构建我们的Linux+Nginx+Tomcat动静分离服务器. 1)    启动docker镜像 查看当前系统存在的镜像,我这里为centos6.6,大家可以参考我第一篇文章进行下载相应的镜像文件,然后启动. 启动方式如下:   docker run -i -t  centos6.6:v2 /bin/bash 然后进入新的docker容器里,查看ip为172.17.0.6

Linux深入篇之四:构建Nginx+Tomcat动静分离架构

Linux深入篇之四:构建Nginx+Tomcat动静分离架构 Nginx动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离.严格意义上说应该是:动态请求跟静态请求分开,可以理解成使用Nginx处理静态页面,Tomcat.Resin处理动态页面. 动静分离从目前实现角度来讲大致分为两种: 一种是纯粹的把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案: 另外一种方法就是动态跟静态文件混合在一起发布,通过nginx来分开. 具体怎么来实现

CentOS7.4—构建Apache+Nginx动静分离

构建Apache+Nginx动静分离实验目的:html静态页面由nginx处理,php动态页面交给apache处理 目录第一部分 准备工作第二部分 配置apache+nginx动静分离第三部分 测试验证 第一部分 环境准备一:服务器两台:Linux系统-CentOS 7.4IP地址:192.168.80.10(搭建LAMP)192.168.80.40(搭建LNMP) 客户端一台:以WIN7为例,用来测试验证,与服务器同一网段IP地址:192.168.80.2二:将防火墙与selinux关闭 注意

Nginx和Tomcat动静分离

. Nginx和Tomcat动静分离,布布扣,bubuko.com

linux环境下Apache+Tomcat集群配置

写在前面 apache配置多个tomcat,实现请求分流,多个tomcat服务均衡负载,增加服务的可靠性.最近研究了一下,遇到许多问题,记录一下,方便以后查阅,不喜欢apache,nginx也是可以做到的. 准备 版本很重要,我就是由于版本原因,一直报错 linux 使用 #lsb_release -a查看当前linux系统版本. 本例:CentOS Linux release 7.0.1406 (Core) jdk 使用 # java -version查看当前版本,如果没有,先装好.downl

Apache+Tomcat集群配置

本文Apache+Tomcat集群配置 基于最新的Apache和Tomcat,具体是2011年4月20日最新的Tomcat和Apache集群和负载均衡配置. 准备环境 Apache[下载地址] 企业框架源码 Apache是http服务器,我们利用其对Tomcat进行负载均衡.目前最新版本为2.2.17,下载地址为http://httpd.apache.org/download.cgi#apache22.如下图: 目前已经出现Apache2.3.11,但是为beta版本,所以没有使用. 下载后直接