Windows下Nginx+PHP动态站点缓存优化核心是OPcache启用调优(最关键)+Nginx静态资源强缓存+PHP-FPM进程复用;三者协同提升响应速度,其中OPcache需在php.ini中启用并配置内存、文件数、校验频率等参数,修改后重启PHP-FPM并用opcache.php验证状态。

Windows 下用 Nginx 1.30.5 搭配 PHP 8.0.30,缓存优化重点不在 Nginx 自身的页面缓存(它默认不缓存 PHP 动态内容),而在于PHP 层级的字节码缓存(OPcache)+ Nginx 对静态资源的高效缓存 + PHP-FPM 进程复用。三者协同才能真正提升动态站点响应速度。
启用并调优 PHP OPcache(最关键一步)
OPcache 是 PHP 内置的字节码缓存,能跳过每次请求时的脚本编译环节,对性能提升最直接。
- 确认已启用:打开 php.ini(通常位于 PHP 安装目录下),确保以下行未被注释且值正确:
zend_extension=php_opcache.dll opcache.enable=1 opcache.memory_consumption=256 opcache.interned_strings_buffer=16 opcache.max_accelerated_files=10000 opcache.revalidate_freq=60 opcache.fast_shutdown=1 opcache.enable_cli=0
- revalidate_freq=60 表示每 60 秒检查一次 PHP 文件是否被修改;开发环境可设为 0(实时检测),生产环境建议保留 30–120;
- 修改后需重启 PHP-FPM 服务(如通过 Windows 服务管理器或命令行
net stop php-fpm && net start php-fpm); - 创建
opcache.php放入网站根目录,内容为<?php opcache_get_status(); ?>,访问该页面可查看缓存命中率、内存使用等实时状态。
Nginx 配置静态资源强缓存
让浏览器和中间代理长期缓存 CSS、JS、图片等不变资源,减少重复请求。
- 在 nginx.conf 的
http块或对应server块中添加:
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff2|ttf|eot)$ {
expires 1y;
add_header Cache-Control "public, immutable";
add_header Last-Modified "";
}- 注意:
expires 1y表示缓存一年;immutable告诉浏览器该资源不会变更,可跳过条件请求(如 If-None-Match); - 若资源会更新(如带版本号或哈希值的文件名),此配置安全有效;若直接改文件内容而不改名,需手动清浏览器缓存或临时调低
expires值调试。
优化 PHP-FPM 进程管理(Windows 下适配)
Windows 不支持 Unix socket,PHP-FPM 必须以 TCP 方式与 Nginx 通信,因此需调整连接方式和进程策略。
立即学习“PHP免费学习笔记(深入)”;
- 编辑 php-fpm.conf(通常在
php\etc\目录),确认监听地址为:
listen = 127.0.0.1:9000 listen.allowed_clients = 127.0.0.1
- 在 www.conf(位于
php\etc\pool.d\)中设置:
pm = dynamic pm.max_children = 20 pm.start_servers = 4 pm.min_spare_servers = 2 pm.max_spare_servers = 8 pm.max_requests = 500
- Windows 内存和句柄限制较严格,
max_children不宜过高(10–30 较稳妥),避免“Too many open files”错误; - Nginx 配置中对应修改
fastcgi_pass为:fastcgi_pass 127.0.0.1:9000;; - 每次修改后运行
nginx -s reload和重启 PHP-FPM 服务生效。
可选:Nginx 缓存 PHP 输出(谨慎启用)
对极少变动的 PHP 页面(如博客文章页、产品详情页),可启用 Nginx 的 fastcgi_cache,但需注意缓存失效逻辑复杂,容易导致用户看到过期内容。
- 在 nginx.conf 的
http块开头添加缓存区定义:
fastcgi_cache_path C:/nginx/cache levels=1:2 keys_zone=phpcache:10m max_size=100m inactive=60m;
- 在
server块的 PHP location 中加入:
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
<pre class='brush:php;toolbar:false;'>fastcgi_cache phpcache;
fastcgi_cache_valid 200 301 302 10m;
fastcgi_cache_bypass $no_cache;
fastcgi_no_cache $no_cache;
add_header X-Cached $upstream_cache_status;}
- 此配置仅缓存 HTTP 状态码为 200/301/302 的响应,有效期 10 分钟;
-
X-Cached响应头可用于调试(HIT / MISS / BYPASS); - 实际使用前务必测试缓存清理机制(如配合 purge 模块或定时清理目录),否则极易出错。



















