Octane Server加速网站实操
安装步骤是这样的:
步骤一: composer require laravel/octane
php artisan octane:install --server=frankenphp
(这个命令安装的 FrankenPHP,vendor/bin 中没有单独的 frankenphp 二进制文件,是因为 Laravel Octane 对 FrankenPHP 做了集成封装,并非以独立二进制包形式存在,而是通过 Octane 命令间接调用)
php artisan octane:start
config/octane.php file • max_execution_time , set this value to 0
步骤二:打开宝塔的「守护进程」:
添加 Octane 守护进程 :
按以下参数填写(核心配置项):
运行用户 选择项目的运行用户(推荐 www,宝塔默认网站运行用户;避免用 root,防止权限问题) 运行目录 填写 Laravel 项目的根目录(必须是项目根目录而非 public)
启动命令 核心命令,:php artisan octane:start --server=frankenphp --host=0.0.0.0 --port=8000 --workers=4 --max-requests=1000
参数说明:
--host=0.0.0.0:允许外部访问(必须,否则仅本地可访问)- --port=8000:Octane 监听端口(可自定义,如 9000,需确保端口未被占用)- --workers=4:工作进程数(等于服务器 CPU 核心数,如 2/4/8)- --max-requests=1000:每个进程处理多少请求后重启(防止内存泄漏) 进程数量 默认 1(Octane 本身是单进程管理多工作进程,无需多实例,填 1 即可)。
配置:
当宝塔站点已配置伪静态(Laravel 原生的 try_files 规则)且无法直接添加反向代理时,核心思路是修改 Nginx 配置,将伪静态规则与反向代理规则结合,让 Nginx 把请求转发到 Octane + FrankenPHP 的 8000 端口,同时保留必要的静态资源处理逻辑。
核心原理
Laravel 伪静态的作用是将所有非静态资源请求转发到 index.php,而 Octane 本身已接管了 PHP 应用的处理,因此我们需要:
让 Nginx 直接处理静态资源(如图片、CSS、JS),避免转发到 Octane,提升性能。
将所有动态请求(非静态资源)转发到 Octane 的 8000 端口,由 FrankenPHP 处理。
检查 Octane 进程是否运行:
ps aux | grep frankenphp
总结
当伪静态与反向代理冲突时,直接修Nginx 配置是最直接的方案。核心是:让 Nginx 处理静态资源,减少 Octane 压力。把动态请求转发到 Octane 端口,由FrankenPHP 处理。保留必要的代理头信息,保证 Laravel 正常运行。
这种配置方式既保留了 Octane 的高性能,又利用了 Nginx 处理静态资源的优势,是生产环境的最佳实践。
站点nginx按如下配置
# 【关键】删除 PHP-FPM 解析配置,避免与 Octane 冲突
# include enable-php-83.conf;
# 【关键】删除宝塔伪静态规则引用,避免覆盖反向代理
# include /www/server/panel/vhost/rewrite/nabi.host.conf;
# 1. 处理静态资源(合并重复规则,简化配置)
location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff|woff2|ttf|eot|svg|bmp|swf)$ {
expires 30d;
add_header Cache-Control "public, max-age=2592000";
try_files $uri =404;
error_log /dev/null;
access_log /dev/null;
}
# 2. 动态请求转发到 Octane + FrankenPHP(8000 端口)
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
}
步骤一: composer require laravel/octane
php artisan octane:install --server=frankenphp
(这个命令安装的 FrankenPHP,vendor/bin 中没有单独的 frankenphp 二进制文件,是因为 Laravel Octane 对 FrankenPHP 做了集成封装,并非以独立二进制包形式存在,而是通过 Octane 命令间接调用)
php artisan octane:start
config/octane.php file • max_execution_time , set this value to 0
步骤二:打开宝塔的「守护进程」:
添加 Octane 守护进程 :
按以下参数填写(核心配置项):
运行用户 选择项目的运行用户(推荐 www,宝塔默认网站运行用户;避免用 root,防止权限问题) 运行目录 填写 Laravel 项目的根目录(必须是项目根目录而非 public)
启动命令 核心命令,:php artisan octane:start --server=frankenphp --host=0.0.0.0 --port=8000 --workers=4 --max-requests=1000
参数说明:
--host=0.0.0.0:允许外部访问(必须,否则仅本地可访问)- --port=8000:Octane 监听端口(可自定义,如 9000,需确保端口未被占用)- --workers=4:工作进程数(等于服务器 CPU 核心数,如 2/4/8)- --max-requests=1000:每个进程处理多少请求后重启(防止内存泄漏) 进程数量 默认 1(Octane 本身是单进程管理多工作进程,无需多实例,填 1 即可)。
配置:
当宝塔站点已配置伪静态(Laravel 原生的 try_files 规则)且无法直接添加反向代理时,核心思路是修改 Nginx 配置,将伪静态规则与反向代理规则结合,让 Nginx 把请求转发到 Octane + FrankenPHP 的 8000 端口,同时保留必要的静态资源处理逻辑。
核心原理
Laravel 伪静态的作用是将所有非静态资源请求转发到 index.php,而 Octane 本身已接管了 PHP 应用的处理,因此我们需要:
让 Nginx 直接处理静态资源(如图片、CSS、JS),避免转发到 Octane,提升性能。
将所有动态请求(非静态资源)转发到 Octane 的 8000 端口,由 FrankenPHP 处理。
检查 Octane 进程是否运行:
ps aux | grep frankenphp
总结
当伪静态与反向代理冲突时,直接修Nginx 配置是最直接的方案。核心是:让 Nginx 处理静态资源,减少 Octane 压力。把动态请求转发到 Octane 端口,由FrankenPHP 处理。保留必要的代理头信息,保证 Laravel 正常运行。
这种配置方式既保留了 Octane 的高性能,又利用了 Nginx 处理静态资源的优势,是生产环境的最佳实践。
站点nginx按如下配置
# 【关键】删除 PHP-FPM 解析配置,避免与 Octane 冲突
# include enable-php-83.conf;
# 【关键】删除宝塔伪静态规则引用,避免覆盖反向代理
# include /www/server/panel/vhost/rewrite/nabi.host.conf;
# 1. 处理静态资源(合并重复规则,简化配置)
location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff|woff2|ttf|eot|svg|bmp|swf)$ {
expires 30d;
add_header Cache-Control "public, max-age=2592000";
try_files $uri =404;
error_log /dev/null;
access_log /dev/null;
}
# 2. 动态请求转发到 Octane + FrankenPHP(8000 端口)
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
}
https://nabi.host/post/cLs2H5Qy