一、什么是动静分离
动态网站是指能够根据用户行为进行实时变化的网站,如商城中的购物车、订单等。静态网站则是指不需要和后端进行交互,内容一般不会发生太多变化的网站,如固定不变的产品展示页面。
动静分离就是将动态和静态资源分离到不同的服务器处理,这样可以提高网站的访问速度和并发处理能力。
二、为什么要做动静分离
1、降低服务器压力
动态网站需要频繁请求数据库,服务器负荷非常大,如果将静态资源和动态资源分离,则可以将静态资源交给CDN来处理,减轻服务器的负担。
2、提高网站性能
动态网站需要动态生成页面,处理时间较长,而静态资源直接返回给用户,速度更快。通过动静分离,静态资源可以通过CDN来实现更快速的访问,从而提高网站的性能。
3、减少带宽使用
由于动态资源需要与数据库进行交互,所以返回给用户的数据量较大。而静态资源可以被CDN缓存起来,当用户再次请求时可以直接从CDN获取,减少了对带宽的使用。
三、如何实现动静分离
实现动静分离需要使用nginx来配置反向代理和CDN加速。
1、配置反向代理
location / { proxy_pass http://backend-api; }
其中backend-api为动态网站的后端地址,当请求 /api/* 路径时,nginx会将请求通过反向代理发送到后端服务器。
2、配置CDN缓存静态资源
location ~* \.(css|js|png|jpg|jpeg|gif|ico)$ { expires 7d; add_header Cache-Control "public"; # CDN加速地址 proxy_pass http://static-cdn; }
该配置会匹配所有静态资源,将这些静态资源缓存起来,并添加7天的过期时间。同时我们会通过proxy_pass将请求发往CDN加速服务器。
四、nginx动静分离配置示例
以下为一个完整的nginx动静分离配置示例。
worker_processes 1; error_log /var/log/nginx/error.log; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name localhost; location / { proxy_pass http://backend-api; } location ~* \.(css|js|png|jpg|jpeg|gif|ico)$ { expires 7d; add_header Cache-Control "public"; proxy_pass http://static-cdn; } } }