简介
本指南面向DouPHP的Web服务器部署与性能优化,覆盖Apache与Nginx两种常见场景,结合项目内路由、响应头与安全中间件的实际实现,给出可操作的配置建议。内容涵盖:
- Apache:mod_php与PHP-FPM选择、虚拟主机优化、模块加载优化
- Nginx:worker进程、静态缓存、反向代理优化
- HTTP缓存策略:Cache-Control、ETag、Last-Modified
- Gzip压缩:文本、图片、字体
- SSL/TLS:会话复用、协议版本
- CDN集成:静态资源加速与边缘缓存策略
项目结构
DouPHP采用统一入口+路由分发模式,根目录提供.htaccess进行URL重写,将前台、后台与API请求重写到对应入口;应用通过入口初始化后进入路由分发并生成HTTP响应。安全响应头由中间件在命中路由时下发,部分接口(如语言包)已设置强缓存头。
graph TB
Client["客户端"] --> Apache["Apache/Nginx"]
Apache --> HTAccess[".htaccess<br/>URL重写"]
HTAccess --> FrontIndex["index.php<br/>前台入口"]
HTAccess --> AdminIndex["admin/index.php<br/>后台入口"]
HTAccess --> ApiIndex["api/index.php<br/>API入口"]
FrontIndex --> Router["路由分发"]
AdminIndex --> Router
ApiIndex --> Router
Router --> Response["Response<br/>发送状态码与响应头"]
Router --> Middleware["安全响应头中间件"]
核心组件
- URL重写与入口分流:通过.htaccess将静态资源直接返回,非静态请求按前/后台/API路径重写到对应入口。
- 应用启动与异常处理:入口负责初始化、路由派发与异常渲染,确保JSON与HTML分支正确输出。
- 响应与头部:统一的Response类负责设置状态码与响应头,中间件集中下发安全头。
- 安全与HSTS:安全配置集中管理可信代理、Host白名单与安全头,HSTS仅在HTTPS且开启时下发。
架构总览
下图展示从请求到响应的关键路径,突出URL重写、路由、中间件与响应发送环节。
sequenceDiagram
participant C as "客户端"
participant A as "Apache/Nginx"
participant R as ".htaccess 重写"
participant I as "入口 index.php"
participant W as "路由/中间件"
participant H as "Response"
C->>A : HTTP 请求
A->>R : 匹配规则
alt 静态资源
R-->>C : 直接返回静态文件
else 动态请求
R->>I : 转发到入口
I->>W : 初始化与路由分发
W->>W : 安全响应头中间件
W->>H : 构建响应(状态码/头/体)
H-->>C : 发送响应
end
详细组件分析
Apache 优化
- PHP运行模式选择
- 推荐在生产环境使用PHP-FPM(FastCGI),以进程隔离、更好的并发与内存控制提升稳定性与吞吐。
- 若仍使用mod_php,需限制MaxRequestsPerChild、启用OPcache,并避免长驻进程导致内存泄漏累积。
- 虚拟主机优化
- 为每个站点独立DocumentRoot与日志,关闭不必要的目录浏览,仅暴露必要目录。
- 合理设置KeepAlive、Timeout、MaxKeepAliveRequests,减少TCP握手开销。
- 模块加载优化
- 仅启用必要模块(如rewrite、headers、ssl、http2)。
- 对静态资源(图片、字体、CSS/JS)在Apache层开启Expires/Cache-Control与Gzip压缩,避免进入PHP。
- URL重写与权限
- 参考项目.htaccess:屏蔽敏感扩展名、透传Authorization头、区分API/后台/前台重写规则,避免误入PHP。
Nginx 优化
- worker进程配置
- worker_processes 建议等于CPU核数;worker_connections根据并发需求调整,配合系统文件描述符上限。
- 启用keepalive_timeout、client_max_body_size等参数适配业务负载。
- 静态文件缓存
- 对图片、字体、CSS/JS设置长期缓存(如一年)与immutable,配合版本号或哈希文件名更新。
- 开启gzip/brotli压缩,针对text/、application/json、font/等类型。
- 反向代理优化
- 使用proxy_pass将动态请求转至PHP-FPM;合理设置proxy_read_timeout、proxy_send_timeout。
- 开启HTTP/2与TLS会话复用,减少握手成本。
- 与项目重写兼容
- 将.htaccess中的重写逻辑迁移至Nginx location块,优先匹配静态资源,再转发到入口。
HTTP缓存策略
- Cache-Control
- 静态资源:public, max-age=31536000, immutable(配合文件名哈希)
- API:按需设置no-cache或短max-age,避免脏数据
- ETag/Last-Modified
- 对静态资源启用ETag或Last-Modified,浏览器条件请求可减少带宽
- 项目中语言包接口已设置强缓存与ETag,适合长期不变的资源
- 响应头下发
- 通过Response类统一设置响应头,保证一致性
Gzip压缩
- 文本内容
- 启用gzip/brotli压缩text/html、application/javascript、application/json、text/css等
- 图片优化
- 优先使用现代格式(WebP/AVIF),服务端按需转换;静态资源交由CDN或Nginx缓存
- 字体文件
- 对woff2等字体启用压缩与长期缓存,减少首屏加载时间
SSL/TLS性能优化
- 会话复用
- 启用TLS会话ID/Session Tickets,降低握手开销
- 协议版本选择
- 启用TLS 1.2/1.3,禁用过时协议;HTTP/2需HTTPS
- HSTS
- 项目支持通过安全中间件在HTTPS下下发Strict-Transport-Security,可按需开启
CDN集成
- 静态资源加速
- 将theme、images、css、js等静态资源托管至CDN,域名分离,缩短链路
- 边缘缓存策略
- 对静态资源设置强缓存(immutable),对API按需缓存;利用ETag/Last-Modified做条件请求
- 回源配置
- 配置回源地址指向应用入口;注意保留必要的请求头(如Accept-Language、Authorization)
依赖关系分析
- .htaccess负责URL重写,将请求导向不同入口
- 入口index.php完成初始化、路由派发与异常处理
- 中间件在命中路由时下发安全响应头
- Response类统一发送状态码与响应头
graph LR
HTAccess[".htaccess"] --> Index["index.php"]
Index --> Router["路由/中间件"]
Router --> Resp["Response"]
Router --> SecMW["安全响应头中间件"]
性能考量
- 前端静态资源尽量走CDN或Web服务器缓存,避免进入PHP
- 启用OPcache与合理的PHP-FPM池大小,避免频繁fork与编译
- 数据库连接复用与查询优化,减少慢查询
- 合理设置超时与连接数,防止雪崩
- 监控与告警:关注QPS、RT、错误率、缓存命中率
故障排查指南
- 404/路由未命中
- 检查.htaccess重写规则是否生效,确认静态资源未被误写
- 安全头未下发
- 确认中间件管道已执行,且Config中security.headers配置正确
- JSON接口异常
- 入口会按site.debug与请求类型输出调试页或JSON错误,查看日志定位
- HSTS未生效
- 仅在HTTPS且配置开启时下发,检查isSecure判断与配置项
结论
通过合理的Web服务器配置(Apache/Nginx)、HTTP缓存策略、Gzip压缩、SSL/TLS优化与CDN集成,可显著提升DouPHP的性能与用户体验。结合项目内的URL重写、响应头与安全中间件,可在不侵入业务代码的前提下获得可观的收益。建议在上线前进行压测与监控,持续调优。
附录
- 配置开关
- 应用密钥与调试开关位于配置文件,生产环境务必关闭调试
- 安全头与HSTS通过安全配置集中管理