插件窝 干货文章 Nginx动静分离及配置的方法是什么

Nginx动静分离及配置的方法是什么

proxy server location 静态 421    来源:    2025-04-27

Nginx动静分离配置方法

动静分离是Web服务器优化的重要策略,通过将动态内容和静态资源分开处理,可以显著提高网站性能。以下是Nginx实现动静分离的详细方法:

动静分离的基本原理

  1. 静态资源:图片、CSS、JS、字体文件等不经常变化的文件
  2. 动态内容:PHP、JSP、ASP等程序生成的页面
  3. 分离方式:将静态资源放在独立服务器或独立目录,通过不同域名或路径访问

配置方法

方法一:基于路径的动静分离

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;
    }
}

方法三:使用Nginx缓存动态内容

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;
    }
}

优化建议

  1. 静态资源优化

    • 启用Gzip压缩
    • 设置合理的缓存头(Expires, Cache-Control)
    • 使用CDN分发静态资源
  2. 动态内容优化

    • 启用Nginx缓存
    • 调整缓冲区大小
    • 启用keepalive连接
  3. 日志分离

    # 动态请求日志
    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可以高效地实现动静分离,显著提升网站性能和用户体验。