动静分离是大型架构的必备技能,下面我重点详解动静分离@mikechen
动静分离
动静分离:指的是动态请求、和静态请求的分离处理。
如下图所示:
比如:将网站的静态资源(如 HTML、CSS、JavaScript、图片…等)。
和动态资源(如 PHP、JSP、Python 脚本…等)分开处理。
由不同的服务器或服务进行响应,从而提高网站的整体性能和可伸缩性。
Nginx动静分离原理
Nginx动静分离原理,主要依赖 Nginx 的 location 匹配机制。
静态资源路径(如 /static/
、/images/
)直接映射到本地目录。
其他请求则通过 proxy_pass
转发给后端动态服务器。
如下所示:
server { listen 80; server_name example.com; # 静态资源处理 location ~* \.(jpg|jpeg|gif|png|css|js|ico)$ { # 设置静态文件根目录 root /var/www/static; # 开启缓存,有效期为30天 expires 30d; } # 动态资源处理 location / { # 将所有非静态资源的请求代理到后端服务器 proxy_pass http://localhost:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
Nginx 会根据 URL 的路径或文件扩展名,匹配相应的 location
块。
如果 URL 匹配到静态资源的 location
,Nginx 会直接在本地文件系统中查找并返回文件给用户。
如果 URL 匹配到动态资源的 location
,Nginx 会将请求 反向代理 到后端应用服务器(如 PHP-FPM 或 Tomcat)。
这种方式通常用于大型网站,将静态资源部署在专门的静态资源服务器上,与处理动态内容的服务器完全分开。