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
指令将请求转发给后端的应用服务器。