1、什么是nginx动静分离?
Nginx 动静分离是一种优化 Web 服务器性能和资源利用率的策略,它将网站的动态内容(如 PHP、Java、Python 等脚本生成的页面)与静态内容(如 HTML、CSS、JavaScript、图片等文件)分离开来,各自采用不同的方式处理和分发。
2、动静分离的目的?
1. 提高性能
静态资源通常不需要服务器端进行复杂计算,Nginx 作为高性能的反向代理和负载均衡器,能够快速、高效地直接返回静态内容,减少后端应用服务器(如 Tomcat、Apache 等)的压力。
2. 缓存利用
静态资源非常适合被浏览器缓存,Nginx 可以设置缓存策略(如 Expires、Cache-Control 头),使客户端在有效期内直接从本地缓存加载资源,减少网络带宽消耗和服务器负载。
3. 简化架构
动静分离可以使后端应用专注于处理业务逻辑,而静态资源的托管、分发等工作由专门的服务器或服务(如 CDN)负责,提高整体系统的可扩展性和可维护性。
4. 故障隔离
动静分离后,即使动态服务出现故障,静态资源仍能正常提供,保证网站部分功能可用,提升用户体验。
3、实现 Nginx 动静分离的基本步骤和配置示例:
步骤一:配置静态资源服务器
1. 确定静态资源路径
确定哪些目录或文件属于静态资源,例如 /var/www/static。
2. 配置 Nginx
在 Nginx 的 server块内添加 location 规则来匹配静态资源,并指定其本地存储路径:
server {
listen 80;
server_name example.com;
location /static/ {
alias /var/www/static/; # alias指定的路径不需要拼接,root指定的路径需要拼接。
expires 30d; # 设置静态资源缓存有效期为30天
}
}
上述配置中,所有访问
http://example.com/static/
开头的 URL 将映射到服务器本地的目录。
/var/www/static/
步骤二:配置动态内容服务器
1. 设置后端应用服务器
确保动态内容服务器(如 Tomcat、Node.js 服务等)运行正常,并监听在特定端口上。
2. 配置反向代理
在 Nginx 中添加另一个 location规则,使用 proxy_pass
指令将非静态资源的请求转发至后端应用服务器:
location / {
proxy_pass http://localhost:8080; # 假设后端应用监听在本地8080端口
include proxy_params; # 引入通用代理参数配置(如保持Host头等)
}
此配置表示除静态资源外的所有请求都将被转发到 http://localhost:8080。
可选步骤:进一步优化
• 按文件扩展名区分动静
根据文件类型(如 .html, .css, .jpg 等)来判断请求是否为静态资源,并分别处理:
location ~* \.(html|css|js|png|jpg|gif)$ {
alias /var/www/static/;
expires 30d;
}
location / {
proxy_pass http://localhost:8080;
include proxy_params;
}
• 使用独立域名或子域名
为静态资源分配一个独立的域名(如 static.example.com)或子域名(如 cdn.example.com),以更好地利用浏览器缓存和CDN服务。
• 启用缓存
除了设置 expires 外,还可以使用 Nginx 的 proxy_cache 模块对动态内容进行缓存,进一步减轻后端服务器压力。
通过以上配置和优化措施,Nginx 实现了动静分离,使得网站的静态资源和动态内容分别得到高效、合理的处理和分发。