laravel octane 是官方推荐的高性能应用服务器,通过 swoole 或 roadrunner 实现常驻内存、复用进程,使 qps 提升 3–10 倍、ttfb 降至约 20ms,但需正确配置 php ≥8.0、扩展启用、会话/日志驱动适配及 nginx 反向代理。

Octane 是 Laravel 官方推荐的高性能应用服务器,它用 Swoole 或 RoadRunner 替代 PHP-FPM,让 Laravel 应用常驻内存、复用进程,避免每次请求都重新加载框架和配置。直接效果是:QPS 提升 3–10 倍,首字节响应(TTFB)从 200ms+ 降到 20ms 左右——但前提是正确启用、避开常见陷阱。
Octane 安装与基础启动必须做对这三步
很多人卡在第一步就报错,本质是环境或命令顺序错了:
- 确保 PHP 版本 ≥ 8.0,且已启用
swoole扩展(php -m | grep swoole能看到输出;若用 RoadRunner,需额外安装rr二进制) - 运行
composer require laravel/octane,然后执行php artisan octane:install—— 这一步会自动注册服务提供者、发布配置、修改server.php入口,不能跳过 - 启动前先清掉旧缓存:
php artisan config:clear && php artisan route:clear,否则 Octane 会加载过期的路由/配置缓存,导致 404 或中间件不生效
为什么 php artisan octane:start 启动后页面空白或 500?
最常见原因是会话或日志驱动不兼容常驻内存模型:
-
SESSION_DRIVER=file必须改为redis或database,否则多 worker 间会话冲突,或文件锁导致阻塞 -
LOG_CHANNEL=stack没问题,但若自定义了基于fopen的日志 handler(比如写到固定文件名),需确保路径可写且无并发写入竞争 - 检查
config/octane.php中的server配置是否匹配已安装扩展:'server' => 'swoole'时,php --ri swoole必须显示正常;设为roadrunner却没放rr到$PATH,会直接报 command not found
路由缓存、配置缓存这些还能用吗?
能用,但必须在 Octane 启动前生成,且后续修改后要重启 Octane:
-
php artisan config:cache和php artisan route:cache依然有效,Octane 启动时会加载这些缓存文件,比动态解析快得多 - 但一旦运行中修改了
.env或config/*.php,这些变更不会自动生效——必须执行php artisan octane:reload(平滑重载)或php artisan octane:restart - 注意:
php artisan view:cache对 Blade 模板有效,但若模板里用了@include动态文件名(如@include($partial)),缓存会失效,建议这类场景禁用视图缓存
生产环境 Nginx 必须加反向代理配置
Octane 自带 HTTP 服务器(Swoole/RR),但它不处理静态资源、SSL 终止、gzip 等,直接暴露给用户有风险且性能不稳:
- Nginx 的
location /必须代理到 Octane 监听地址,例如:proxy_pass http://127.0.0.1:8000;(默认端口) - 静态资源(
.js、.css、.png)应由 Nginx 直接返回,不要转发给 Octane,避免无谓的 PHP 进程调度 - 务必设置
proxy_set_header Host $host;和proxy_set_header X-Real-IP $remote_addr;,否则Request::ip()和 URL 生成会出错
真正难的不是启动 Octane,而是确认所有中间件、事件监听器、单例对象在长生命周期下行为一致——比如一个全局静态变量在第一次请求被赋值,第二次请求可能还带着旧值。这种隐式状态,比性能数字更值得花时间 audit。











