需先确认WSL2版本并升级,替换阿里云源后安装Nginx 1.24和PHP 8.3,配置PHP-FPM使用Unix socket监听,Nginx中location ~ .php$块须正确指向该socket并确保fastcgi_param SCRIPT_FILENAME拼接无误,最后通过phpinfo()验证。

在 WSL2(Ubuntu 22.04 或 24.04)中配置 PHP 8.3 与 Nginx 1.24,核心是确保两者通过 FastCGI 正确通信,且路径、权限、监听方式完全匹配。不是版本越新越难配,而是细节稍有偏差就会导致 .php 文件被下载而非执行。
确认系统环境与软件源
先升级 WSL2 并换国内源,避免安装卡住或包过时:
- 运行
wsl -l -v确认是 WSL2;若非,执行wsl --set-version Ubuntu-22.04 2升级 - 关闭并重启:
wsl --shutdown→ 再启动目标发行版 - 备份并替换 apt 源为阿里云镜像(以 Ubuntu 22.04 为例):
sudo sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.listsudo sed -i 's/security.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list - 执行
sudo apt update && sudo apt upgrade -y
安装 Nginx 1.24 和 PHP 8.3
推荐使用官方 PPA 获取较新稳定版(Ubuntu 自带的 nginx 版本通常偏低):
- 添加 Nginx 官方源:
sudo apt install curl gnupg2 ca-certificates lsb-release ubuntu-keyringecho "deb http://nginx.org/packages/mainline/ubuntu `lsb_release -cs` nginx" | sudo tee /etc/apt/sources.list.d/nginx.listcurl -fsSL https://nginx.org/keys/nginx_signing.key | sudo apt-key add -sudo apt update - 安装 Nginx:
sudo apt install nginx -y,验证用nginx -v(应显示 1.24.x) - 安装 PHP 8.3:
sudo apt install software-properties-commonsudo add-apt-repository ppa:ondrej/php -ysudo apt updatesudo apt install php8.3-fpm php8.3-cli php8.3-mysql php8.3-curl php8.3-gd php8.3-mbstring php8.3-xml php8.3-zip -y
配置 PHP-FPM 监听方式
必须让 PHP-FPM 与 Nginx 使用同一种通信方式(推荐 Unix socket,更安全高效):
修复 Core bailout 状态损坏安全问题,以及 BZ2、DOM、PDO、Opcache/JIT 内存与执行错误,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。
立即学习“PHP免费学习笔记(深入)”;
- 编辑配置:
sudo nano /etc/php/8.3/fpm/pool.d/www.conf - 确认以下三行设置正确(取消注释并按需修改):
listen = /run/php/php8.3-fpm.socklisten.owner = www-datalisten.group = www-data - 重启服务:
sudo systemctl restart php8.3-fpm - 验证是否监听:
sudo ss -tlnp | grep 'php8.3',应看到 socket 路径
Nginx 站点配置要点
关键在 location ~ \.php$ 块——它决定 PHP 请求能否进到 FPM:
- 编辑站点配置,例如:
sudo nano /etc/nginx/sites-available/default - 确保包含以下最小有效配置(注意 root 路径与
SCRIPT_FILENAME拼接逻辑):root /var/www/html;index index.php index.html;location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;} - 检查 fastcgi_params 是否启用 SCRIPT_FILENAME:
sudo nano /etc/nginx/snippets/fastcgi-php.conf,确认含:fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - 测试并重载:
sudo nginx -t && sudo systemctl reload nginx
验证与排错提示
放一个 /var/www/html/info.php,内容为 <?php phpinfo(); ?>:
- 访问
http://localhost/info.php显示 PHP 信息页 → 成功 - 若提示 502 Bad Gateway:检查
php8.3-fpm是否运行(systemctl status php8.3-fpm),socket 路径是否一致 - 若直接下载 .php 文件:90% 是
fastcgi_pass地址错误,或SCRIPT_FILENAME拼错(如写成/scripts)、或root与实际文件路径不一致 - 权限问题常见于
/var/www/html所有者不是www-data,可补:sudo chown -R www-data:www-data /var/www/html


















