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
mikechen睿哥,10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!

后台回复【架构】即可获取《阿里架构师进阶专题全部合集》,后台回复【面试】即可获取《史上最全阿里Java面试题总结》