答案:通过静态资源域名分离、Nginx缓存头配置、PHP路径动态适配、动态内容回源透传及CDN状态验证五步实现全站加速。具体包括:一、用static.example.com子域名接入CDN并设1年缓存;二、Nginx中为静态后缀配置expires 1y与immutable头;三、PHP通过.env注入CDN_URL并模板中动态拼接;四、回源设真实Host与X-Forwarded-Proto透传;五、用DevTools验证X-Cache HIT及URL、响应头正确性。

如果您已部署PHP项目但页面加载缓慢,尤其静态资源(如CSS、JS、图片)响应延迟高、首屏时间长,则很可能是源站直连导致的网络跳数多、带宽受限与缓存缺失。以下是实现全站静态资源加速与动态内容安全回源的多种配置路径:
一、静态资源域名分离与CDN接入配置
该方法通过为静态资源分配独立子域名(如static.example.com),使其可被CDN专属识别与缓存,避免与主站动态请求混杂,提升边缘节点命中率并降低源站HTTP/HTTPS握手压力。
1、在DNS管理平台为static.example.com添加CNAME记录,指向CDN服务商提供的加速域名(如static.example.com.w.kunlungr.com)。
2、登录CDN控制台(阿里云/腾讯云/Cloudflare),进入「域名管理」→「添加域名」,填写加速域名为static.example.com。
立即学习“PHP免费学习笔记(深入)”;
3、设置源站信息:填写PHP项目所在服务器的公网IP或主站域名(如example.com),启用「强制HTTPS回源」并勾选「跟随302跳转」。
4、完成域名所有权验证:按提示添加TXT解析记录,等待控制台显示「已验证」状态。
5、在CDN缓存规则中,针对*.js, *.css, *.png, *.jpg, *.woff2, *.webp等后缀,统一设置缓存时间为31536000秒(1年);对*.php, /api/, /admin/等路径明确设置为不缓存(Cache-Control: no-cache)。
二、Nginx源站缓存头精细化输出
此步骤确保CDN节点与浏览器均能正确识别资源不可变性,避免因响应头冲突(如PHP框架自动注入no-cache)导致缓存失效或反复回源。
1、编辑Nginx server配置块(如/etc/nginx/conf.d/example.conf),在server上下文中插入以下location指令:
2、添加如下配置段(置于root指令同级,且不得被proxy_pass或rewrite覆盖):
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff2|ttf|eot|webp|pdf|xml|txt)$ {
expires 1y;
add_header Cache-Control "public, immutable";
add_header X-Content-Type-Options nosniff;
try_files $uri =404;
}
3、执行nginx -t && nginx -s reload重载配置,并用curl -I https://static.example.com/js/app.js验证响应头是否含Cache-Control: public, immutable与Expires字段。
三、PHP项目内资源路径动态适配CDN域名
该方法通过运行时环境判断自动注入CDN_URL,避免硬编码导致本地调试失败或生产环境404,同时兼容构建工具生成的哈希文件名与HTTPS协议要求。
1、在项目入口文件index.php顶部加载环境变量:
if (file_exists(__DIR__.'/../.env')) { $env = parse_ini_file(__DIR__.'/../.env'); define('CDN_URL', $env['CDN_URL'] ?? ''); }
2、在模板中统一使用CDN_URL常量拼接路径,例如:
<link rel="stylesheet" href="/css/app.css">
<img src="/images/logo.png" alt="logo">
3、确保.env文件未提交至Git仓库,生产环境单独部署该文件,其中内容为:
CDN_URL=https://static.example.com
4、若使用ThinkPHP框架,在config/app.php中设置:
'app_host' => $_ENV['APP_ENV'] === 'production' ? 'https://static.example.com' : '',
并确保__STATIC__等内置常量基于此生成。
四、动态内容回源策略与Header透传配置
该方法保障用户会话、表单提交、API调用等动态请求始终由源站处理,同时让CDN正确识别原始协议、真实IP及安全上下文,防止HTTPS降级或X-Forwarded-For丢失。
1、在CDN控制台「回源配置」中,将「回源Host」设为源站真实域名(如example.com),而非IP地址,避免Nginx虚拟主机匹配失败。
2、启用「透传X-Forwarded-Proto头」,并在Nginx server块中添加:
set $real_scheme $http_x_forwarded_proto;
if ($real_scheme = '') { set $real_scheme $scheme; }
proxy_set_header X-Forwarded-Proto $real_scheme;
3、在Nginx中配置真实IP获取逻辑:
set_real_ip_from 100.64.0.0/10;
set_real_ip_from 172.16.0.0/12;
set_real_ip_from 192.168.0.0/16;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
4、验证回源有效性:访问/index.php后检查PHP中$_SERVER['HTTPS']是否为on,$_SERVER['REMOTE_ADDR']是否为真实客户端IP而非CDN节点IP。
五、CDN缓存状态与资源URL双重验证
该方法通过浏览器开发者工具Network面板实时确认CDN是否真正生效,排除配置遗漏、缓存污染或混合内容拦截等隐蔽问题。
1、打开Chrome DevTools → Network标签页,刷新页面,筛选类型为JS/CSS/IMG的请求。
2、逐个点击静态资源,检查Response Headers中是否存在X-Cache: HIT(阿里云)或CF-Cache-Status: HIT(Cloudflare)。
3、确认每个资源的Request URL以https://static.example.com开头,而非http://或/example.com/static/。
4、检查同一资源的响应头中Cache-Control值是否为public, immutable,且Content-Type正确(如text/css、image/webp)。
5、若发现某资源返回403 Forbidden,立即检查Nginx对该路径的权限配置,确认public/static/目录具有rx权限且无deny all指令误配。



















