最新公司新开了一个项目,项目由我来配置基础环境,会写一系列的教程来展示,一个网站从零到上线的整个过程。首先本文介绍资源文件的隔离。
为什么要将静态资源文件与动态请求进行分离? 为了降低 Tomcat 服务器的负载,可以通过本文设置并结合 CDN 来实现来更彻底地降低服务器的负载。
如图所示,所有的请求都压到了同一台服务器上, 无论静态还是动态的请求,这样流量大的话势必会造成服务器的负载过高,因为动静分离是必不可少的。
首先这是我们项目的目录结构, resource 目录和 **_res** 目录中都是静态资源文件,存放比如 js/css/img 等资源。这两个目录下的文件有所不同,**_res** 目录下面是压缩版本的,比如压缩的js/css。通过 Git 或者 SVN 将项目上传到服务器上后,配置 Nginx 来完成静态资源的分离。
首先看一张图(图的来源是:http://www.cnblogs.com/xiaoblog/p/4241086.html)
当请求经过 Nginx 时,如果是静态资源的请求,就直接返回主机上静态资源即可, 如果是动态请求,则去请求 Tomcat 服务器后再返回。如果流量不是很大,静态资源可以和 Tomcat 服务器放在同一台主机上,否则需要将静态资源与 Tomcat 服务器分开。
我司对于资源文件的做法是新建一个二级域名,该域名只用于加载静态资源文件。如 res.domain.com,这样做的好处是简化了在 Nginx 的 配置。
首先需要安装 Nginx, 可以参考我的另外一篇文章 Nginx实现Tomcat集群。这里只需要参考到安装 Nginx 即可。
Nginx 静态资源配置
打开 Nginx 配置文件
vim /usr/local/nginx/conf/nginx.conf
添加 server
server {
# 只接收静态资源请求
listen 80;
server_name res.domain.com;
charset utf8;
default_type text/plain;
add_header Access-Control-Allow-Origin *;
#access_log logs/heiyan.image.access.log click;
location ~* \.(zip|rar|gz|tar.gz|gz|exe)$ {
return 500;
}
location / {
#资源文件的目录
root /home/resources;
index index.html;
expires 30d;
default_type text/plain;
}
}
server {
# 接收动态请求
listen 80;
server_name www.domain.com;
charset utf8;
access_log logs/access.log main;
location / {
proxy_pass http://127.0.0.1:8080;
}
}
在 Nginx 的配置文件中指定了资源文件的目录为 /home/resources ,所以需要将资源拷贝到该目录下,进入上文下载的项目的目录中,将资源目录(我这里是**_res目录)拷贝到 /home/resources**目录下面。
cp -r _res /home/resources
拷贝完成后的目录应该是: /home/resources/_res
在 **/home/resources/_res** 目录下放一张图片 a.jpg ,用于测试。
启动 Nginx
打开浏览器访问: http://res.domain.com/_res/a.jpg
如果是动态请求,则使用 http://www.domain.com
域名
返回结果:
因为静态资源文件包含 css/js 等文件,修改提交后需要拷贝增量与修改的文件到 /home/resources 目录下,如果嫌麻烦,可以直接在 Nginx 配置文件中,配置 路径为项目的资源文件夹根路径,比如 **/home/wide-api/src/main/java/resources/_res**, 这种在更新代码之后,可以直接请求到新的资源文件。之后会写一篇通过阿里云CDN来完成静态分离。
注: 由于我的是在虚拟机上的 Nginx 进行测试,也没有域名,且是minimal版本系统,没有桌面环境,所以需要配置宿主机的hosts, 在宿主机的浏览器中访问。在真实服务器且有自己绑定到服务器上域名的就直接测试即可。
使用 SwitchHosts 软件 配置 hosts,我的虚拟机 ip 为192.168.200.129
192.168.200.129 www.domain.com res.domain.com
原文:https://www.cnblogs.com/vcmq/p/9484376.html