Nginx是大型架构核心,下面重点详解Nginx动静分离实战@mikechen
Nginx动静分离
动静分离,是指在Web服务中将动态资源、与静态资源分开处理与部署的架构思想。
比如:静态资源(如HTML、CSS、JavaScript、图片、视频等)。
无需服务器端频繁计算或访问数据库,可直接由文件系统或CDN提供。
而动态资源,(如需后端逻辑、数据库查询、用户会话等),由应用服务器或后端服务生成。

动静分离的主要目的是提高系统性能、降低后端负载、便于缓存和水平扩展,同时改善资源管理与运维效率。
Nginx动静分类原理

Nginx 实现动静分离,主要依赖于其强大的 Location 匹配机制。
URL 匹配:通过正则表达式匹配 URL 的后缀(如 .png, .js)或特定的目录路径(如 /static/)。
以及,高效 I/O 模型:Nginx 使用 epoll 模型和 sendfile 系统调用(零拷贝技术)。
在处理静态文件时,Nginx 可以直接将磁盘文件的数据传输到网络 socket。
而无需将数据拷贝到用户态内存,这使得它处理静态资源的速度比 Tomcat/Python 快几倍甚至几十倍。
缓存机制:Nginx 还可以设置 expires 头,通知浏览器缓存静态文件,进一步减少服务器请求。

动态请求转发给应用服务器:如 Tomcat、Jetty、Express、Django 等处理动态请求。
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on; # 开启零拷贝,加速静态文件传输
keepalive_timeout 65;
# 定义后端应用服务器集群
upstream backend_server {
server 127.0.0.1:8080;
}
server {
listen 80;
server_name localhost;
# ----------------------------------------------------
# 规则 1:动态请求转发
# 凡是不匹配下面静态规则的,或者特定路径的,都转发给 Tomcat
# ----------------------------------------------------
location / {
proxy_pass http://backend_server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# ----------------------------------------------------
# 规则 2:静态资源分离 (按后缀匹配)
# 凡是 .jpg, .png, .css, .js 结尾的请求,直接去本地找
# ----------------------------------------------------
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css|js)$ {
root /data/www/static; # 静态文件实际存放的绝对路径
expires 30d; # 设置浏览器缓存过期时间为 30 天
}
# ----------------------------------------------------
# 规则 3:静态资源分离 (按目录匹配 - 可选)
# 凡是 /static/ 开头的请求
# ----------------------------------------------------
# location /static/ {
# root /data/www/;
# }
}
}
总之,Nginx动静分离是提升Web系统性能与可扩展性的有效实践。
通过合理的路由规则、缓存策略与CDN结合,可显著降低后端负载、提高用户体验并简化运维流程。
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注作者「mikechen」公众号,获取更多技术干货!
后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》,后台回复【面试】即可获取《史上最全阿里Java面试题总结》