1. 首页 > 服务器系统 > Ubuntu

Ubuntu安装PHP和PHP Nginx配置方法

# Ubuntu 安装 PHP 和 PHP Nginx 配置方法(扩展版)

最近接手了一个 PHP 项目,之前没做过 PHP,于是从搭建 PHP 环境开始学习下,同时写篇 Ubuntu 安装 PHP 的教程。本文会从清理旧版本、添加 PPA、安装不同版本 PHP、配置 Nginx,到常见问题排查和安全建议,做一个相对完整的整理,方便刚接触 PHP 的朋友参考。

需要说明的是,原文中未出现 img 图片标签,因此本次扩展保留原有代码、链接和结构;如果你的原始文章里有截图,请按原位置保留即可。

一、删除遗留的 PHP 包

在安装新的 PHP 版本之前,建议先清理系统中可能残留的旧 PHP 包。尤其是之前装过 PHP、或者系统自带 PHP 的情况下,不同版本混在一起容易导致 Nginx 调用错版本、扩展冲突、命令行和 Web 环境版本不一致等问题。

可以使用下面的命令批量卸载已安装的 PHP 相关包:

sudo apt-get purge `dpkg -l | grep php | awk '{print $2}' | tr "\n" " "`
sudo apt autoremove

第一条命令的作用是:列出当前系统中所有已安装的包,筛选出包含 php 的包名,然后用 apt-get purge 批量卸载。第二条命令 sudo apt autoremove 会清理不再需要的依赖包。

执行前要注意:如果你服务器上已经有正在运行的 PHP 网站,卸载 PHP 会导致网站暂时无法访问。因此操作前最好先备份网站文件、数据库和 Nginx 配置。如果是生产环境,建议在维护窗口内操作。

二、添加 PPA

Ubuntu 官方源里的 PHP 版本通常比较固定,如果你需要安装 PHP 5.6、PHP 7.1 这类旧版本,或者想安装更新版本,可以添加 ondrej/php PPA。这个 PPA 是 Ubuntu 上比较常用的 PHP 源,提供了多个 PHP 版本和扩展。

添加 PPA 前,先安装语言包,并设置本地化环境:

sudo apt-get install -y language-pack-en-base
sudo LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/php
sudo apt-get update

这里三行命令分别表示:安装英文语言包、以 UTF-8 环境添加 PPA、更新软件包列表。添加 PPA 后,系统才能从该源中搜索和安装 PHP 5.6、PHP 7.1、PHP 7.4、PHP 8.x 等不同版本。

需要注意的是,不同 Ubuntu 版本对 PPA 的支持情况不同。较新的 Ubuntu 系统可能默认使用 PHP 7.4 或 PHP 8.x,如果你强行安装 PHP 5.6、PHP 7.1,可能会遇到依赖问题。旧版本 PHP 已经停止官方支持,存在安全风险,建议只在兼容旧项目时使用,生产环境尽量使用受支持的 PHP 版本。

三、安装 PHP

添加好 PPA 并更新源之后,就可以安装 PHP 了。下面分别列出 PHP 5.6 和 PHP 7.1 的安装命令。你可以根据项目需要选择其中一个版本安装,不建议同时装多个版本后不区分地使用。

PHP 5.6 版本

sudo apt-get install php5.6 php5.6-cli
sudo apt-get install php5.6-dev php5.6-fpm php5.6-cgi
sudo apt-get install php5.6-mbstring php5.6-mcrypt php5.6-mysql php5.6-gd php5.6-curl php5.6-memcache

这里安装的内容包括:PHP 核心、命令行工具、开发包、PHP-FPM、CGI,以及常用扩展。其中:

  • php5.6-cli:命令行下运行 PHP 使用;
  • php5.6-fpm:配合 Nginx 使用的 FastCGI 进程管理器;
  • php5.6-mysql:连接 MySQL 数据库;
  • php5.6-gd:图像处理扩展;
  • php5.6-curl:用于发送 HTTP 请求;
  • php5.6-mbstring:多字节字符串处理,很多中文项目需要;
  • php5.6-mcrypt:加密扩展,旧项目中常见。

PHP 7.1 版本

sudo apt-get install php7.1 php7.1-cli
sudo apt-get install php7.1-dev php7.1-fpm php7.1-cgi
sudo apt-get install php7.1-mysql php7.1-gd php7.1-curl php7.1-memcache

PHP 7.1 相比 PHP 5.6 在性能上有明显提升,但同样已经属于旧版本。安装完成后,可以用下面的命令检查版本:

php -v
php-fpm7.1 -v
ls /run/php/

php -v 查看命令行 PHP 版本,php-fpm7.1 -v 查看 PHP-FPM 版本,ls /run/php/ 可以查看 PHP-FPM 生成的 socket 文件。Nginx 配置中会用到这个 socket 路径。

四、Nginx 配置

PHP 安装好之后,还需要让 Nginx 能把 .php 文件交给 PHP-FPM 处理。否则用户访问 PHP 文件时,可能直接下载源码,或者返回 404、502 错误。

在 Nginx 站点配置中,通常需要加入类似下面的 location 配置:

# Pass all .php files onto a php-fpm/php-fcgi server.
location ~ [^/]\.php(/|$) {
  fastcgi_split_path_info ^(.+?\.php)(/.*)$;
  if (!-f $document_root$fastcgi_script_name) {
    return 404;
  }
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  # fastcgi_pass unix:/run/php/php5.6-fpm.sock;
  fastcgi_pass unix:/run/php/php7.1-fpm.sock;
  fastcgi_index index.php;
  include fastcgi_params;
}

这段配置的含义如下:

  • location ~ [^/]\.php(/|$):匹配所有 PHP 文件请求;
  • fastcgi_split_path_info:拆分 PATH_INFO,兼容部分框架;
  • if (!-f $document_root$fastcgi_script_name):如果文件不存在,直接返回 404,避免把不存在的 PHP 文件交给 PHP-FPM;
  • fastcgi_param SCRIPT_FILENAME:告诉 PHP-FPM 要执行哪个文件;
  • fastcgi_pass:指定 PHP-FPM 的 socket 地址;
  • include fastcgi_params:引入 Nginx 的 FastCGI 默认参数。

注意 fastcgi_pass 这一行非常关键。如果你安装的是 PHP 7.1,就使用:

fastcgi_pass unix:/run/php/php7.1-fpm.sock;

如果你安装的是 PHP 5.6,则改为:

fastcgi_pass unix:/run/php/php5.6-fpm.sock;

改完 Nginx 配置后,先测试配置是否正确:

sudo nginx -t

如果提示语法正确,再重启 Nginx 和 PHP-FPM:

sudo systemctl restart php7.1-fpm
sudo systemctl restart nginx

如果你用的是 PHP 5.6,就把 php7.1-fpm 换成 php5.6-fpm。之后可以创建一个测试文件:

sudo nano /var/www/html/info.php

内容写入:

<?php
phpinfo();
?>

保存后,在浏览器访问 http://你的服务器IP/info.php。如果能看到 PHP 信息页面,说明 Nginx 和 PHP-FPM 已经配置成功。测试完成后,务必删除这个文件,避免暴露服务器环境信息。

五、常见问题排查

PHP 和 Nginx 配置过程中,常见问题主要有以下几类:

1、访问 PHP 文件变成下载

说明 Nginx 没有把 .php 请求交给 PHP-FPM,通常是 location ~ \.php$ 配置缺失,或者配置文件没有生效。检查 Nginx 配置后,执行 sudo nginx -t 并重启 Nginx。

2、502 Bad Gateway

通常是 PHP-FPM 没有启动,或者 fastcgi_pass 指向的 socket 路径不存在。可以执行:

sudo systemctl status php7.1-fpm
ls /run/php/

确认 socket 文件名和 Nginx 配置一致。如果不一致,修改 fastcgi_pass 后重启服务。

3、404 File not found

可能是 SCRIPT_FILENAME 配置错误,或者站点根目录 root 设置不对。检查 Nginx 的 root 是否指向网站实际目录,并确认 PHP 文件确实存在。

4、PHP 版本不对

如果命令行 php -v 和 phpinfo() 显示的版本不一致,说明 CLI 和 FPM 使用的不是同一个版本。可以通过 update-alternatives 管理命令行版本,通过 Nginx 的 fastcgi_pass 管理 Web 版本。

六、安全与维护建议

PHP 环境搭建完成后,还需要注意安全和维护:

  • 测试用的 info.php 用完立即删除;
  • 生产环境尽量使用受支持的 PHP 版本,PHP 5.6、PHP 7.1 已停止支持,存在安全风险;
  • 定期执行 sudo apt-get update && sudo apt-get upgrade 更新系统;
  • 在 php.ini 中合理配置 cgi.fix_pathinfo=0,降低文件解析漏洞风险;
  • 按项目需要安装扩展,不要一次性安装所有扩展;
  • 给 PHP-FPM 使用独立用户,并限制目录权限;
  • 如果服务器有多站点,建议每个站点使用独立的 PHP-FPM 池。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

原文链接:http://xianglong.me/article/ubuntu-install-php-and-nginx-config/?utm_source=tuicool&utm_medium=referral

本文由主机测评网发布,不代表主机测评网立场,转载联系作者并注明出处:https://zhuji.jb51.net/ubuntu/4012.html

联系我们

在线咨询:点击这里给我发消息

Q Q:2220678578