【极全网】
CDN访问PHP文件变成下载通常是由于 MIME类型识别错误 或 服务器未正确解析PHP 导致的。以下是逐步排查和解决方案:
1. 检查CDN的MIME类型配置
现象:CDN可能将
.php
文件识别为application/octet-stream
(二进制流),触发浏览器下载。解决:
登录CDN控制台(如阿里云、腾讯云、Cloudflare等)。
找到 MIME类型设置,确保
.php
文件的MIME类型为text/html
或application/x-httpd-php
。如果CDN支持自定义Header,强制添加响应头:
Content-Type: text/html; charset=UTF-8
2. 验证源服务器是否正确解析PHP
现象:如果直接访问源站(不经过CDN)也触发下载,说明服务器未配置PHP解析。
解决(以Nginx/Apache为例):
Nginx:确保配置中包含PHP-FPM转发:
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}Apache:确认已启用PHP模块并配置
AddType
:LoadModule php_module modules/libphp.so
AddType application/x-httpd-php .php
3. 检查CDN缓存规则
现象:CDN缓存了错误的响应(如下载的PHP文件)。
解决:
清除CDN缓存(通过控制台或API)。
设置CDN缓存规则,禁止缓存
.php
文件(动态内容不应缓存):Cache-Control: no-store, no-cache, must-revalidate
4. 检查SSL/TLS配置
现象:HTTPS环境下,CDN到源站的证书不匹配或协议不兼容。
解决:
确保CDN与源站的SSL证书有效且域名匹配。
在CDN设置中启用 “回源SNI”(如Cloudflare的SSL/TLS模式设为“Full”或“Full Strict”)。
5. 测试响应头
通过浏览器开发者工具(F12)或
curl
检查响应头:curl -I https://your-domain.com/file.php
确认返回的
Content-Type
是text/html
而非application/octet-stream
。
6. 临时绕过CDN测试
修改本地hosts文件,将域名直接解析到源站IP,测试是否能正常访问PHP文件。
如果正常,问题出在CDN配置;如果异常,问题在源站。
总结步骤:
优先检查源站PHP解析 → 确保直接访问源站正常。
检查CDN的MIME类型和缓存规则 → 禁止缓存PHP,强制
Content-Type
。清除CDN缓存 → 避免旧缓存干扰。
验证SSL/TLS → 确保CDN到源站通信正常。
如果问题仍未解决,请提供以下信息进一步排查:
CDN服务商名称(如Cloudflare、阿里云等)。
直接访问源站的测试结果。
响应头截图(
curl -I
输出)。
扫一扫在手机打开