动静分离是Web服务器优化的重要策略,通过将动态内容和静态资源分开处理,可以显著提高网站性能。以下是Nginx实现动静分离的详细方法:
server {
listen 80;
server_name example.com;
# 动态请求转发到后端应用服务器
location / {
proxy_pass http://backend_server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# 静态资源直接由Nginx处理
location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml|flv|swf|txt|woff|woff2|ttf|eot)$ {
root /path/to/static/files;
access_log off;
expires 30d; # 设置缓存时间
}
}
# 静态资源服务器配置
server {
listen 80;
server_name static.example.com;
location / {
root /path/to/static/files;
access_log off;
expires max;
}
}
# 动态应用服务器配置
server {
listen 80;
server_name www.example.com;
location / {
proxy_pass http://backend_server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;
server {
listen 80;
server_name example.com;
location / {
proxy_cache my_cache;
proxy_pass http://backend_server;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
}
location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml|flv|swf|txt|woff|woff2|ttf|eot)$ {
root /path/to/static/files;
expires max;
access_log off;
}
}
静态资源优化:
动态内容优化:
日志分离:
# 动态请求日志
access_log /var/log/nginx/dynamic.log main;
# 静态资源日志(可选关闭)
location ~* \.(jpg|jpeg|gif|png|css|js|ico)$ {
access_log off;
}
# 定义上游服务器
upstream backend {
server 127.0.0.1:8080;
server 127.0.0.1:8081 backup;
}
server {
listen 80;
server_name www.example.com;
# 静态资源
location ~* \.(jpg|jpeg|gif|png|ico|css|js|pdf|txt|zip|rar|tar.gz)$ {
root /data/www/static;
expires 30d;
access_log off;
gzip_static on;
}
# 字体文件
location ~* \.(eot|ttf|woff|woff2|svg)$ {
root /data/www/static/fonts;
expires max;
access_log off;
add_header Access-Control-Allow-Origin *;
}
# 动态请求
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 60;
proxy_read_timeout 60;
proxy_send_timeout 60;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
# 禁止访问隐藏文件
location ~ /\. {
deny all;
}
}
通过以上配置,Nginx可以高效地实现动静分离,显著提升网站性能和用户体验。