一、什么是动静分离
动态网站是指能够根据用户行为进行实时变化的网站,如商城中的购物车、订单等。静态网站则是指不需要和后端进行交互,内容一般不会发生太多变化的网站,如固定不变的产品展示页面。 动静分离就是将动态和静态资源分离到不同的服务器处理,这样可以提高网站的访问速度和并发处理能力。
二、为什么要做动静分离
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;
}
}
}