为了提高网站的响应速度,减轻程序服务器(Tomcat,Jboss等)的负载,对于静态资源比如图片,js,css等文件,我们可以在反向代理服务器中进行缓存,这样浏览器在请求一个静态资源时,代理服务器就可以直接处理,而不用将请求转发给后端服务器。用户请求的动态文件比如servlet,jsp则转发给Tomcat,Jboss服务器处理,这就是动静分离。这也是反向代理服务器的一个重要的作用。
实现方式:
- 1、(推荐)将静态文件存放在专门的服务器上,使用单独的域名
- 2、将动态和静态文件放在一起,使用nginx区分
以实现方式1为例
前提:将静态文件存放在代理服务器中
在ngnix中创建文件目录(如/usr/local/nginx/static),将所有静态文件发布到该目录中
在nginx.conf http server 中配置动静分离
server {
location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$
{
root /usr/local/nginx/static;
# 客户端浏览器缓存30天
expires 30d;
}
}
在实际的后台服务器中发布的程序中,使用静态文件时,路径指向设置为静态文件服务器(这里是代理服务器)。
完整配置
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_next_upstream http_502 http_504 error timeout invalid_header;
proxy_pass http://localhost:8082;
# 真实的客户端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 /static;
expires 30d;
}
#静态文件交给nginx处理
location ~ .*\.(js|css)?$
{
root /static;
expires 1h;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
页面中的图片是放在了和Nginx同级目录的static文件夹下面。
动静分离的原理:Nginx配置中,通过location的配置,结合正则表达式,根据请求路径判断当前请求是否静态资源,如果是,则通过 root static; 配置直接读取/usr/local/nginx/static下面对应相对路径的资源。如果是jsp等动态资源,则转发到Tomcat服务器。
注意,可以使用 root [绝对路径];, 不一定要将静态资源放在Nginx目录下。
这里将静态资源的location放在前面优先匹配(同样是正则匹配的情况下)。
在此基础上,也可以通过不同的正则对不同的静态资源类型配置不同的缓存期限,如创意等图片可能会变动,缓存期限设小一点,而js/css等静态资源基本不变,缓存期限可以设长一点。
来源:oschina
链接:https://my.oschina.net/u/4390740/blog/4293090