又拍云
4.7 / 5.0
声明:VPS主机测评网仅分享信息/测评(有时效性),不销售或代购、不提供任何支持,请自行辨别。

评测概述

动静分离是指将动态内容(PHP、API)和静态内容(图片、CSS、JS)分别用不同的域名或路径处理,并通过cdn加速静态资源。这样做可以减轻源站压力,提高缓存命中率,也能让SEO更友好。

本文介绍如何配置动静分离(以Nginx + Cloudflare为例)。

一、为什么要动静分离?

WordPress等动态网站的瓶颈通常在于PHP和数据库。如果所有请求(包括图片、CSS)都经过PHP处理,资源浪费严重。动静分离后:静态资源由CDN直接返回,不经过后端;动态请求由Nginx+PHP‑FPM处理。

好处包括:页面加载速度提升;源站负载降低;CDN缓存更高效;静态资源可长期缓存,不需要频繁回源。

二、配置步骤

1. 规划域名

建议使用两个域名:主域名 example.com 处理动态内容,静态域名 static.example.com 处理图片、CSS、JS等。也可以使用子目录(/static/),但独立域名更灵活。

2. 修改网站代码,将静态资源URL替换为静态域名

WordPress可以通过插件或代码实现。在主题的functions.php中添加:

function rewrite_static_urls($content) {
    $url = 'https://static.example.com';
    $content = str_replace('https://example.com/wp-content/uploads/', $url . '/wp-content/uploads/', $content);
    $content = str_replace('https://example.com/wp-includes/', $url . '/wp-includes/', $content);
    return $content;
}
add_filter('the_content', 'rewrite_static_urls');

也可以使用CDN Enabler或WP Offload Media这类插件,配置更简单。

3. 配置Nginx动静分离规则(源站)

在Nginx配置中,将静态资源请求直接由Nginx处理,不经过PHP‑FPM:

location ~* \.(jpg|jpeg|png|gif|ico|svg|css|js|woff|woff2|ttf)$ {
    expires 30d;
    add_header Cache-Control "public, immutable";
    log_not_found off;
    access_log off;
}

同时,可以配置静态域名的server块,只托管静态文件:

server {
    listen 80;
    server_name static.example.com;
    root /var/www/html;
    location / {
        try_files $uri =404;
        expires 30d;
        add_header Cache-Control "public, immutable";
    }
}

4. 为静态域名开通CDN

将静态域名接入Cloudflare或其他CDN,并开启全缓存(缓存所有静态文件)。可以设置缓存规则:

  • 图片、CSS、JS:缓存30天
  • HTML:不缓存(如果静态域名没有HTML文件,可忽略)

5. 测试

使用浏览器开发者工具查看资源是否从静态域名加载,响应头中是否有cf‑cache‑status: HIT。使用PageSpeed Insights确认静态资源没有被标记为“未缓存”。

三、注意事项

  • 如果使用HTTPS,静态域名也要配置SSL证书(可用免费Let's Encrypt)。
  • WordPress插件自动替换URL时,注意HTTPS和HTTP混用问题。
  • 当主题或插件更新时,可能需要手动刷新CDN缓存。
  • 如果网站启用了页面缓存,确保动态内容仍然走主域名。

四、常见问题

Q:动静分离后,有些图片不显示?
检查静态域名的根目录是否指向正确,以及图片文件是否存在于对应路径。也可能是URL替换逻辑有误。

Q:修改后SEO受影响吗?
只要主域名的HTML结构不变,静态资源域名变化不会影响SEO。搜索引擎主要关注HTML内容。

Q:可以用同一个域名下的不同路径吗?
可以,但CDN配置稍复杂。推荐使用独立子域名。

动静分离对于中小网站也有明显收益,值得实施。