Ubuntu上搭建PHP8.2+Nginx环境必须添加ppa:ondrej/php源,安装php8.2-fpm及扩展,禁用libapache2-mod-php8.2;创建/run/php目录并设权限;配置Nginx的fastcgi_pass与php8.2-fpm.sock路径一致;启用扩展并用update-alternatives切换默认PHP版本。

在Ubuntu系统上搭建PHP8.2环境并让Nginx正确调用PHP-FPM处理动态请求,必须严格区分Web服务器类型——Nginx用户绝不能装libapache2-mod-php8.2,否则会引发服务冲突或502错误;Apache用户则严禁启用php8.2-fpm。
添加PPA源并安装PHP8.2核心组件
Ubuntu官方仓库不提供PHP 8.2,直接运行apt install php8.2-fpm会报“Unable to locate package”。必须先添加ondrej/php这个事实标准PPA源。
执行:sudo add-apt-repository ppa:ondrej/php(按回车确认)
更新软件包索引:sudo apt update
立即学习“PHP免费学习笔记(深入)”;
安装PHP8.2-FPM及常用扩展:sudo apt install php8.2-fpm php8.2-cli php8.2-mysql php8.2-mbstring php8.2-xml php8.2-curl php8.2-gd php8.2-zip
注意:别装libapache2-mod-php8.2——它和php8.2-fpm互斥,装了会导致Nginx无法连接PHP进程。
初始化PHP-FPM运行环境
安装完成后,/run/php/目录往往不存在,而php8.2-fpm默认监听unix:/run/php/php8.2-fpm.sock,缺少该路径会导致启动失败并报“No such file or directory”错误。
手动创建目录并设权限:sudo mkdir -p /run/php && sudo chown www-data:www-data /run/php
验证FPM是否真装上:dpkg -l | grep php8.2-fpm——若无输出说明FPM二进制根本没安装,只装了CLI版本。
启动服务:sudo systemctl enable --now php8.2-fpm
检查状态:sudo systemctl is-active php8.2-fpm应返回active;若为inactive,先运行sudo php-fpm8.2 -t检测配置语法错误,比systemctl start更早暴露www.conf里的拼写问题。
Nginx配置PHP解析规则
打开Nginx默认站点配置文件:sudo nano /etc/nginx/sites-available/default
定位到server块内location ~ \.php$段落,替换为以下内容:
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
关键点:fastcgi_pass路径必须与/etc/php/8.2/fpm/pool.d/www.conf中listen = /run/php/php8.2-fpm.sock完全一致;SCRIPT_FILENAME参数缺失会导致404或空白页。
测试配置语法:sudo nginx -t
重载Nginx:sudo systemctl reload nginx
验证PHP环境是否生效
在Nginx默认根目录下创建测试文件:echo "" | sudo tee /var/www/html/info.php
浏览器访问http://localhost/info.php,页面应完整显示PHP 8.2.0信息,且“Loaded Configuration File”指向/etc/php/8.2/fpm/php.ini。
若页面空白或报502 Bad Gateway,90%是fastcgi_pass与listen路径不匹配;若phpinfo()中未列出mysql、curl等扩展,说明扩展虽已安装但未启用——运行sudo phpenmod -v 8.2 mysql curl gd手动启用。
检查默认PHP版本是否切换成功:php -v和which php都应显示8.2;若仍为8.1,执行:sudo update-alternatives --set php /usr/bin/php8.2



















