Apache整合Tomcat实现静态资源与动态资源分离

时间:2023-01-04 13:25:43

关于这个话题,在网上搜了很多资料,要么看不懂,要么写得不详细,要么跟着做也不能实现。好不容易尝试了一种方法,先记下。


背景:

以前做项目,喜欢把所有文件(html, js, css, class)打包成一个war,然后直接放在tomcat上跑,方便快捷,也没出现过什么问题。最近接触了Apache服务器,发现如果把静态资源放在apache上,访问的速度会比放在tomcat上快,而且也能减少war包的大小,加快部署tomcat的速度。(特别是不用把dojo那堆文件放在war上...)


好了言归正传。下面说一下实现的方法。

第一步:

修改本地host文件(C:\Windows\System32\drivers\etc\host),增加一个FQDN,用来访问静态资源。如:

127.0.0.1 static.topsuapp.com


第二步:

把项目的静态资源复制到Apache的某个目录下(如:${SRVROOT}/htdocs/topsuapp。${SRVROOT}是apache的安装目录)


第三步:

自己写一个conf文件,名字就叫"topsu-app.conf",内容如下。然后在httpd.conf里引用这个文件。 (Include conf/test/topsu-app.conf)

LoadModule headers_module modules/mod_headers.so

<VirtualHost *:80>
    Header set Access-Control-Allow-Origin http://topsuapp.com:9001
    ServerName static.topsuapp.com
    DocumentRoot "${SRVROOT}/htdocs/xwanapp"
</VirtualHost>
说明:

1)LoadModule, 要先加载apache的headers_module

2)Header 这行很重要,声明哪个url可以跨域访问这些静态资源。(也可以把后面的url改成 “*” ,即 “Header set Access-Control-Allow-Origin *”,表示所有人都能访问这些静态资源,但这样好像很不安全。)

3)ServerName 指出用哪个url来访问这些静态资源。这样用了第一步创建的url "static.topsuapp.com"

4)DocumentRoot 指出放静态资源的位置


第四步:

在项目文件中,比如index.jsp,用下面的方法引用静态资源

<head>
<meta charset="UTF-8">
<link href="http://static.topsuapp.com/dojo_lib/gridx/resources/claro/Gridx.css" rel="stylesheet" type="text/css"/>
<link href="http://static.topsuapp.com/dojo_lib/dijit/themes/claro/claro.css" rel="stylesheet" type="text/css"/>
<link href="http://static.topsuapp.com/css/app.css" rel="stylesheet" type="text/css"/>

最后,把项目部署到tomcat。启动tomcat和apache,访问项目url http://topsuapp.com:9001,发现所有静态资源都可以访问。


补充:

关于Access-Control-Allow-Origin,后面要么匹配一条url (如:http://topsuapp.com:9001),要么匹配所有(如:*)。暂时没发现怎样才能匹配额定几条url。