You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker中php:8.2.1-cli容器静态资源缓存配置求助

解决PHP内置服务器静态资源无缓存问题

你的核心问题是用了PHP内置HTTP服务器——这个服务器仅用于开发调试,完全没有静态资源缓存功能,所以你之前尝试的meta标签、opcache等方案都无法解决图片、CSS、字体这类静态资源的缓存问题。必须切换到生产级Web服务器(如Nginx)配合PHP-FPM的架构部署,以下是具体Docker配置方案:

1. 重构Docker架构(Nginx + PHP-FPM)

放弃直接用php:8.2.1-cli启动内置服务器,改用php:8.2.1-fpm处理PHP脚本,Nginx负责接收请求、处理静态资源缓存并转发PHP请求给FPM。

目录结构示例

your-project/
├── docker-compose.yml
├── nginx/
│   └── default.conf
└── src/  # 你的网站代码目录
    ├── index.php
    ├── css/
    ├── images/
    └── fonts/

编写docker-compose.yml

version: '3.8'

services:
  php-fpm:
    image: php:8.2.1-fpm
    volumes:
      - ./src:/var/www/html  # 挂载本地代码目录到容器内
    # 如需安装PHP扩展(如gd、zip),可添加command字段执行docker-php-ext-install命令

  nginx:
    image: nginx:alpine
    ports:
      - "80:80"  # 映射宿主机80端口到容器
    volumes:
      - ./src:/var/www/html
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf  # 挂载Nginx配置文件
    depends_on:
      - php-fpm

2. 配置Nginx静态资源缓存

在nginx/default.conf中添加静态资源缓存规则,设置缓存过期时间和控制头:

server {
    listen 80;
    server_name localhost;
    root /var/www/html;
    index index.php index.html;

    # 图片类资源缓存配置
    location ~* \.(jpg|jpeg|png|gif|svg|webp|ico)$ {
        expires 30d;  # 缓存30天
        add_header Cache-Control "public, immutable";
    }

    # CSS/JS资源缓存配置
    location ~* \.(css|js)$ {
        expires 7d;   # 缓存7天
        add_header Cache-Control "public, immutable";
    }

    # 字体文件缓存配置
    location ~* \.(woff|woff2|ttf|eot)$ {
        expires 180d; # 缓存半年
        add_header Cache-Control "public, immutable";
    }

    # 转发PHP请求到FPM
    location ~ \.php$ {
        fastcgi_pass php-fpm:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    # 路由 fallback 处理
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
}

3. 部署与验证

  1. 将网站代码放入src目录
  2. 在项目根目录执行命令:docker-compose up -d
  3. 访问http://localhost,打开Chrome开发者工具的网络面板,刷新页面后查看静态资源的状态:
    • 首次加载显示200 OK,响应头包含Cache-Control和Expires字段
    • 再次刷新显示304 Not Modified,说明缓存生效

关键说明

  • immutable头告诉浏览器:缓存过期前无需发送验证请求(如If-Modified-Since),进一步提升加载效率
  • 可根据资源更新频率调整expires时间:比如频繁修改的CSS/JS设短周期,长期不变的字体、图片设长周期
  • Nginx处理静态资源是核心强项,配合PHP-FPM的架构是生产环境标准配置,性能远高于PHP内置服务器

内容的提问来源于stack exchange,提问作者Nokt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 20:33:26