温馨提示×

Ubuntu LNMP如何配置PHP版本

小樊
44
2025-12-10 08:25:49
栏目: 编程语言

Ubuntu LNMP 配置 PHP 版本

一 安装多个 PHP 版本

  • 更新索引并添加 Ondřej Surý 的 PHP APT 仓库(适用于 Ubuntu 18.04/20.04/22.04):
    • 安装工具:sudo apt-get install -y software-properties-common apt-transport-https lsb-release ca-certificates wget
    • 导入 GPG:wget -qO - https://packages.sury.org/php/apt.gpg.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/php-archive-keyring.gpg >/dev/null
    • 添加源(将 {php_version} 替换为所需版本,如 8.1/8.2/8.3):
      • Ubuntu 20.04/22.04/24.04:echo "deb [signed-by=/usr/share/keyrings/php-archive-keyring.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list >/dev/null
      • Ubuntu 18.04:echo "deb [signed-by=/usr/share/keyrings/php-archive-keyring.gpg] https://packages.sury.org/php/ bionic main" | sudo tee /etc/apt/sources.list.d/php.list >/dev/null
    • 更新索引:sudo apt-get update
  • 安装所需版本与扩展(示例为 PHP 8.1 与常用扩展):
    • sudo apt-get install -y php8.1 php8.1-fpm php8.1-mysql php8.1-curl php8.1-xml php8.1-gd php8.1-mbstring
    • 如需 PHP 7.4/8.2/8.3,将版本号替换为对应数字后执行相同命令。

二 为站点切换 PHP 版本

  • 方式 A 按站点使用不同 FPM Socket(推荐,隔离性好)
    1. 确认 FPM 监听套接字(示例为 8.17.4):
      • ls /run/php/php*.sock(常见为 php8.1-fpm.sockphp7.4-fpm.sock
    2. 编辑站点配置(如 /etc/nginx/sites-available/your_domain.conf),为不同版本分别设置 location:
      # PHP 8.1
      location ~ \.php$ {
          include snippets/fastcgi-php.conf;
          fastcgi_pass unix:/run/php/php8.1-fpm.sock;
          fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
          include fastcgi_params;
      }
      
      # PHP 7.4
      location ~ \.php7\.4$ {
          include snippets/fastcgi-php.conf;
          fastcgi_pass unix:/run/php/php7.4-fpm.sock;
          fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
          include fastcgi_params;
      }
      
      • 将需要 PHP 7.4 的站点使用 .php7.4 后缀或单独 server 块;其余使用 .php8.1
    3. 检查并重载 Nginx:sudo nginx -t && sudo systemctl reload nginx
    4. 重启对应 FPM:sudo systemctl restart php8.1-fpm php7.4-fpm
  • 方式 B 全局切换默认版本(影响所有未单独配置的站点)
    1. 停止旧版本并禁用开机启动,启动新版本并启用开机启动(示例从 7.4 切换到 8.1):
      • sudo systemctl stop php7.4-fpm && sudo systemctl disable php7.4-fpm
      • sudo systemctl start php8.1-fpm && sudo systemctl enable php8.1-fpm
    2. 将站点中的 fastcgi_pass 统一改为新版本套接字(如 unix:/run/php/php8.1-fpm.sock
    3. 检查并重载 Nginx:sudo nginx -t && sudo systemctl reload nginx

三 验证与常见问题

  • 验证版本
    • CLI:php -v
    • Web:创建 /var/www/html/info.php,内容为 <?php phpinfo(); ?>,访问 http://your-domain/info.php 查看版本与 SAPI/FPM 信息;完成后删除该文件。
  • 常见问题
    • 502 Bad Gateway:多为 FPM 未启动或套接字路径不一致。执行 sudo systemctl status php{version}-fpm 查看日志,确认 Nginx 中 fastcgi_pass 与 FPM 的 listen 一致(socket 或 127.0.0.1:9000/9001)。
    • 扩展不一致:各版本需单独安装扩展,例如 sudo apt-get install -y php8.1-redis php7.4-redis;安装后重启对应 php{version}-fpm
    • 端口冲突:若使用 TCP 方式,确保不同版本监听不同端口(如 9000/9001),并在 Nginx 中对应修改 fastcgi_pass 127.0.0.1:900x;
    • 配置语法:每次修改 Nginx 后先执行 sudo nginx -treload,避免语法错误导致中断服务。

0