Nginx是大型架构的基石,下面详解Nginx动静分离技术@mikechen
Nginx动静分离
Nginx 动静分离,是一种优化网站性能的常用架构模式。
其核心思想,是将网站的静态资源(如图片、CSS、JavaScript 文件)、和动态资源(如由后端程序生成的 HTML 页面)分开处理。
如下图所示:

这样,可以显著提升网站的访问速度、和并发处理能力。
Nginx动静分离原理
动静分离的核心:是将动态、和静态请求区分开。
整体实现,如下图所示:

静态资源由Nginx直接读取和响应,而动态请求由后端应用服务器(如Tomcat、Node.js)处理。
静态请求的 URL 通常以 .html, .css, .js, .jpg, .png, .gif 等文件扩展名结尾。
Nginx 会将这些请求匹配到静态文件目录规则,然后直接从本地文件系统读取并返回文件给客户端,而不会将请求转发给后端服务器。
动态请求,通过Nginx的反向代理(proxy_pass)转发给后台服务器。
http {
upstream backend_servers {
server backend1_address:port;
server backend2_address:port;
}
server {
listen 80;
server_name example.com;
# 静态资源配置
location ~* \.(html|htm|css|js|gif|jpg|jpeg|bmp|png|ico|txt)$ {
root /usr/local/nginx/static; # 静态文件存放路径
expires 30d; # 设置缓存时间,避免频繁请求
access_log off; # 可关闭访问日志提升性能
}
# 动态请求配置
location / {
proxy_pass http://backend_servers; # 动态请求转发给后端服务器
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
动态请求:通常,动态请求的 URL 不包含特定的文件扩展名,或者以 .do, .jsp, .php 等结尾。
Nginx 会将这些请求匹配到代理规则,然后通过 proxy_pass 指令将请求转发给后端的应用服务器。
mikechen睿哥
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。