Nginx动静分离
动静分离,顾名思义,就是将网站的动态内容、和静态内容分开处理、和部署。
如下图所示:

静态内容:指不依赖后端程序处理、不经常变化的文件。
比如:HTML、CSS、JavaScript、图片(jpg、png等)、视频。。。等。
动态内容:需要后端应用程序(如PHP、Java、Python等)处理后生成的内容,如API接口、动态网页…等。
将静态资源的请求分发给专门的服务器或 Nginx 直接处理,可以释放后端应用服务器的资源,使其专注于处理动态逻辑。
Nginx动静分离原理
Nginx动静分离原理,如下图所示:

大致流程,如下:
首先,请求分类转发。
Nginx根据请求的URL路径或文件后缀名判断请求类型,静态资源请求直接由Nginx返回,动态资源请求通过反向代理转发到后端服务器。
其次,缓存机制。
Nginx可以缓存静态资源,减少对后端服务器的请求次数,提升响应速度。
然后,浏览器缓存控制。
通过设置Expires、Cache-Control等HTTP头,控制浏览器缓存,减少重复请求。
最后,资源专职处理。
Tomcat专注处理动态请求,Nginx专注处理静态资源,提高资源利用率和性能
http {
upstream backend_server {
server 127.0.0.1:8080; # 后端动态资源服务器地址和端口
}
server {
listen 80;
server_name example.com;
# 静态资源处理
location /static/ {
alias /usr/local/mystatic/; # 静态资源路径
autoindex on; # 可选,目录浏览
expires 30d; # 设置浏览器缓存30天
}
# 静态资源匹配文件扩展名
location ~* \.(jpg|jpeg|png|gif|css|js|ico|html)$ {
root /usr/local/mystatic/;
expires 30d;
}
# 动态资源处理,转发给后端服务器
location / {
proxy_pass http://backend_server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
location /static/ ,用于匹配静态资源请求,直接从本地静态目录返回。
动态请求,通过 proxy_pass 转发给后端应用服务器。
mikechen睿哥
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。