前面介绍了Nginx的负载均衡,一般来说,都需要将动态资源和静态资源分开,这样可以很大程度的提升静态资源的访问速度,同时在开过程中也可以让前后端开发并行可以有效的提高开发时间,也可以有些的减少联调时间 。接下来介绍什么是动静分离以及如何使用Nginx实现动静分离。
一、什么是动静分离
在Web开发中,通常来说,动态资源其实就是指那些后台资源,而静态资源就是指HTML,JavaScript,CSS,img等文件。
动静分离,说白了,就是将网站静态资源(HTML,JavaScript,CSS,img等文件)与后台应用分开部署,提高用户访问静态代码的速度,降低对后台应用服务器的请求。后台应用服务器只负责动态数据请求。
优势:分担负载,减轻web服务器的压力,适用于大负载。静态资源放置cdn,同时还可以通过配置缓存到客户浏览器中,这样极大减轻web服务器的压力。
劣势:网络环境不佳时,ajax回应很慢,导致页面出现空白,出错处理会不好看。不利于网站SEO(搜索引擎优化),增加了开发复杂度。
二、实现方案
动静分离就是根据一定规则静态资源的请求全部请求Nginx服务器,后台数据请求转发到Web应用服务器上。从而达到动静分离的目的。目前比较流行的做法是将静态资源部署在Nginx上,而Web应用服务器只处理动态数据请求。这样减少Web应用服务器的并发压力。具体如下图所示:
三、配置Nginx动静分离
1. 修改nginx.conf配置,其中第一个location负责处理后台请求,第二个负责处理静态资源, nginx 的其他配置,请参考前之前的文章。 具体如下所示:
#拦截静态资源 location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|js|css)$ { root static; expires 30d; }
上面的示例,主要是配置image、js、css等资源文件的路径和地址。然后设置缓存失效的时间。
完成的Nginx配置如下所示:
worker_processes 1; events { worker_connections 1024; } http { server { listen 80; server_name localhost; #拦截后台请求 location / { proxy_pass http://localhost:81; proxy_set_header X-Real-IP $remote_addr; } #拦截静态资源 location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|js|css)$ { root static; expires 30d; } } }
2. 在Nginx 下 创建 static 目录,将图片,js, css 等文件 拷贝到该目录下
3. 重启Nginx,使用命令: ./nginx -s reload 重新启动Nginx。
四、验证测试
Nginx 配置完成之后,在浏览器中访问:http://localhost/ 查看页面的请求效果。
通过浏览器的调试工具,通过图中红框内容都可以看出来引用静态资源成功了。动态请求转发到了81端口的web应用服务器,而静态的资源文件,访问的是80端口。说明Nginx的动静分离配置成功。
最后
以上,就把如何配置Nginx动静分离介绍完了,是不是特别简单。
因为后面还要介绍Nginx 的优化,免不了查看Nginx的状态。所以这里就提前介绍下。下篇会介绍Nginx的高性能优化,怎么让Nginx服务器实现10w的并发访问量。
这是系列课程,大家关注我的微信公众号(架构师精进),随时交流。
推荐阅读:
Nginx极简入门(八)Nginx性能监控及性能状态参数详解!
Nginx极简入门(六)配置Nginx负载均衡,提高系统并发性能!