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-memcachePHP 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
