尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Linux新手10分钟搭建PHP环境:Ubuntu与CentOS双系统Nginx+PHP-FPM实战指南

Linux新手10分钟搭建PHP环境:Ubuntu与CentOS双系统Nginx+PHP-FPM实战指南 1. 为什么新手需要一个“快速”的PHP环境如果你刚接触Linux或者从Windows转过来想学PHP开发第一道坎往往不是写代码而是“把环境跑起来”。在Windows上你可能习惯了XAMPP、PHPStudy这类一键安装包点几下鼠标就万事大吉。但到了Linux世界虽然也有类似的集成包但很多教程一上来就是apt-get install、yum install然后让你改一堆配置文件新手很容易在某个步骤卡住信心大受打击。所以这个“快速安装”的核心目标不是追求极致的性能或最精简的配置而是在保证环境可用、概念清晰的前提下用最少的命令、最明确的步骤让一个Linux新手能在10分钟内从一个干净的Linux系统到一个能运行?php phpinfo(); ?的完整PHP环境。我们选择的路径是使用Linux发行版自带的包管理器因为它最稳定、依赖关系处理得最好对新手最友好。今天我们就以目前最流行的Ubuntu 22.04 LTS和CentOS 7/8 Stream为例手把手走一遍。注意网上很多教程会教你编译安装但对于新手我强烈反对一开始就这么做。编译安装涉及解决依赖、配置参数出错概率极高应该是你熟悉环境后为了特定优化才去考虑的进阶操作。2. 安装前的关键准备认识你的Linux系统动手之前搞清楚自己在用什么系统是避免一切混乱的开始。不同的Linux发行版使用不同的包管理命令。2.1 确定你的Linux发行版打开终端输入以下命令cat /etc/os-release或者用这个更通用的命令hostnamectl你会看到类似这样的信息对于Ubuntu/Debian系会包含Ubuntu 22.04或Debian字样。对于CentOS/RHEL/Fedora系会包含CentOS Linux 7、CentOS Stream 8或Rocky Linux字样。2.2 更新系统软件包源必做步骤这是一个好习惯能确保你安装的软件是最新且兼容的。如果你是 Ubuntu/Debiansudo apt update sudo apt upgrade -ysudo是获取管理员权限apt update是更新软件包列表apt upgrade是升级已安装的包。-y参数表示对所有的提示自动回答“yes”。如果你是 CentOS/RHEL 8 / Rocky Linux 8sudo dnf update -y在CentOS 8及以后yum被dnf取代了它们用法几乎一样但dnf更先进。如果你是 CentOS 7sudo yum update -y2.3 安装必要的辅助工具可选但推荐安装一个文本编辑器方便后续修改配置文件。我推荐vim或nano。vim功能强大但需要学习nano对新手极其友好。Ubuntu/Debian:sudo apt install vim nano -yCentOS/RHEL:sudo yum install vim nano -y或sudo dnf install vim nano -y做完这些你的系统就准备好了。接下来我们分两条主线进行一条是Ubuntu/Debian另一条是CentOS/RHEL。请根据你的系统选择对应的章节阅读。3. Ubuntu/Debian 系统安装 PHP 与 Web 服务器在Ubuntu的世界里安装软件非常便捷。我们将安装一个经典的组合Nginx PHP-FPM。为什么选这个组合而不是古老的Apache因为Nginx更轻量、性能更好在现代PHP项目中应用更广泛学它更有前途。3.1 安装 Nginx Web 服务器Nginx 是一个高性能的HTTP和反向代理服务器。sudo apt install nginx -y安装完成后启动Nginx并设置开机自启sudo systemctl start nginx sudo systemctl enable nginx现在打开你的浏览器输入你的服务器IP地址或者http://localhost你应该能看到Nginx的默认欢迎页面。如果看不到可能是防火墙没开80端口。用下面命令放行sudo ufw allow Nginx HTTPufw是Ubuntu上简单的防火墙配置工具。3.2 安装 PHP 及其常用扩展Ubuntu的软件源里有不同版本的PHP。我们需要安装PHP本身以及负责与Nginx通信的PHP-FPMFastCGI Process Manager还有一些开发中必不可少的扩展。sudo apt install php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-zip -yphp-fpm: PHP的进程管理器负责处理PHP脚本。php-mysql: 让PHP可以连接MySQL/MariaDB数据库做Web项目几乎必装。php-curl: 用于HTTP请求很多第三方API调用会用到。php-gd: 图像处理库用于生成验证码、处理图片等。php-mbstring: 多字节字符串处理对中文等非英文字符支持至关重要。php-xml: XML解析很多Web服务如RSS和PHP内部功能需要。php-zip: Zip压缩解压支持。安装完成后PHP-FPM服务会自动启动。你可以检查一下它的状态sudo systemctl status php8.1-fpm注意这里的8.1是Ubuntu 22.04默认的PHP版本号。你的系统可能会安装稍有不同的版本如8.2请用php -v命令查看确切的版本并相应调整服务名例如可能是php8.2-fpm。3.3 配置 Nginx 与 PHP-FPM 协同工作这是最关键的一步。Nginx本身不能解析PHP代码它需要把.php结尾的请求转发给PHP-FPM进程来处理。首先我们为你的网站创建一个目录。假设你的网站叫myphpappsudo mkdir -p /var/www/myphpapp赋予这个目录合适的权限让Nginx以www-data用户运行能够读取其中的文件sudo chown -R www-data:www-data /var/www/myphpapp sudo chmod -R 755 /var/www/myphpapp接下来为这个网站创建一个Nginx配置文件。Nginx的站点配置文件通常在/etc/nginx/sites-available/目录下。sudo vim /etc/nginx/sites-available/myphpapp将以下配置粘贴进去用nano的话复制后按CtrlShiftV粘贴server { listen 80; server_name _; # 这里可以填你的域名测试用下划线 _ 代表所有 root /var/www/myphpapp; index index.php index.html index.htm; location / { try_files $uri $uri/ 404; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.ht { deny all; } }关键点解释root /var/www/myphpapp;: 指定网站文件的根目录。index index.php index.html index.htm;: 定义默认访问的首页文件。location ~ \.php$ { ... }: 这是一个正则表达式位置块所有以.php结尾的请求都会进入这里处理。fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;:这是最重要的配置。它告诉Nginx将PHP请求通过一个Unix套接字文件传递给PHP-FPM进程。请再次确认这里的PHP版本号php8.1-fpm.sock与你系统安装的版本一致。你可以通过ls /var/run/php/命令查看存在的.sock文件。保存并退出编辑器在vim中按Esc然后输入:wq回车在nano中按CtrlX然后按Y确认保存。然后启用这个站点配置相当于创建一个软链接到sites-enabled目录sudo ln -s /etc/nginx/sites-available/myphpapp /etc/nginx/sites-enabled/为了安全建议移除Nginx的默认站点配置如果你不需要的话sudo rm /etc/nginx/sites-enabled/default最后测试Nginx配置是否正确并重启Nginx服务使配置生效sudo nginx -t # 测试配置看到 “syntax is ok” 和 “test is successful” 才算成功 sudo systemctl reload nginx # 或 sudo systemctl restart nginx3.4 创建测试文件验证环境现在让我们创建一个最简单的PHP文件来测试环境是否工作。sudo vim /var/www/myphpapp/index.php输入以下内容?php phpinfo(); ?保存退出。打开浏览器访问你的服务器IP或http://localhost。你应该能看到一个详细的PHP信息页面上面列出了PHP版本、已加载的扩展等信息。如果看到这个页面恭喜你Ubuntu下的PHP环境已经搭建成功如果看到的是空白页、404错误或者直接下载了PHP文件说明配置有问题。最常见的错误是fastcgi_pass的套接字路径不对或者PHP-FPM服务没有运行。请回头仔细检查sudo nginx -t的输出信息和sudo systemctl status php8.1-fpm的服务状态。4. CentOS/RHEL 系统安装 PHP 与 Web 服务器在CentOS/RHEL系包括Rocky Linux、AlmaLinux上过程类似但包管理命令和默认路径略有不同。我们同样以Nginx PHP-FPM组合为例。请注意CentOS 7 默认的软件源中PHP版本较老5.4我们需要先添加更新的软件源。4.1 添加 EPEL 和 REMI 软件源获取新版本软件对于CentOS 7需要先安装EPELExtra Packages for Enterprise Linux和REMI仓库。sudo yum install epel-release -y sudo yum install https://rpms.remirepo.net/enterprise/remi-release-7.rpm -y对于CentOS 8 / Rocky Linux 8EPEL通常已包含主要需要REMI。sudo dnf install epel-release -y sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm -y4.2 启用指定版本的 PHP 模块流REMI仓库提供了多个PHP版本。例如我们要启用PHP 8.2。CentOS 7:sudo yum-config-manager --enable remi-php82CentOS 8 / Rocky Linux 8:sudo dnf module reset php sudo dnf module enable php:remi-8.2 -y4.3 安装 NginxCentOS基础仓库里可能没有Nginx或者版本很旧。我们可以从EPEL或Nginx官方源安装。这里使用EPEL的版本对新手足够稳定。# CentOS 7 sudo yum install nginx -y # CentOS 8 / Rocky Linux 8 sudo dnf install nginx -y启动Nginx并设置开机自启sudo systemctl start nginx sudo systemctl enable nginx同样需要配置防火墙放行HTTP80端口。CentOS 7默认使用firewalldCentOS 8也可能使用。sudo firewall-cmd --permanent --add-servicehttp sudo firewall-cmd --reload现在访问服务器IP或http://localhost应该能看到Nginx的测试页。4.4 安装 PHP 及扩展现在安装PHP-FPM和常用扩展。注意包名可能和Ubuntu略有不同。# CentOS 7 sudo yum install php-fpm php-mysqlnd php-curl php-gd php-mbstring php-xml php-zip -y # CentOS 8 / Rocky Linux 8 sudo dnf install php-fpm php-mysqlnd php-curl php-gd php-mbstring php-xml php-zip -y注意数据库扩展包名是php-mysqlndMySQL Native Driver这是CentOS/RHEL上的标准名称。启动PHP-FPM并设置开机自启sudo systemctl start php-fpm sudo systemctl enable php-fpm检查状态sudo systemctl status php-fpm。4.5 配置 Nginx 与 PHP-FPM创建网站目录并设置权限。CentOS/RHEL上Nginx和PHP-FPM默认运行的用户和组通常是nginx。sudo mkdir -p /var/www/myphpapp sudo chown -R nginx:nginx /var/www/myphpapp sudo chmod -R 755 /var/www/myphpapp配置Nginx。CentOS上站点配置文件通常放在/etc/nginx/conf.d/目录下每个文件以.conf结尾。sudo vim /etc/nginx/conf.d/myphpapp.conf输入以下配置server { listen 80; server_name _; root /var/www/myphpapp; index index.php index.html index.htm; location / { try_files $uri $uri/ 404; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; # 注意这里CentOS默认使用TCP端口 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.ht { deny all; } }关键区别注意fastcgi_pass这一行。在CentOS/RHEL的默认配置中PHP-FPM监听的是127.0.0.1:9000这个TCP端口而不是Unix套接字。这是与Ubuntu默认配置的一个主要不同点。检查PHP-FPM的监听方式确认是端口9000sudo vim /etc/php-fpm.d/www.conf查找listen 127.0.0.1:9000这一行确保它没有被注释掉行首没有分号;。通常默认就是这样的。保存Nginx配置后测试并重启sudo nginx -t sudo systemctl reload nginx同时如果修改了PHP-FPM的配置也需要重启它sudo systemctl restart php-fpm4.6 创建测试文件并验证和Ubuntu步骤一样创建测试文件sudo vim /var/www/myphpapp/index.php写入?php phpinfo(); ?。再次访问你的服务器地址。如果看到PHP信息页CentOS下的环境也宣告成功。如果遇到502 Bad Gateway错误大概率是Nginx无法连接到PHP-FPM的9000端口请检查PHP-FPM服务是否运行以及防火墙是否放行了本地回环loopback的通信通常不需要额外设置。5. 安装 MySQL/MariaDB 数据库可选但建议绝大多数PHP应用都需要数据库。MySQL和MariaDB是两大主流选择MariaDB是MySQL的一个分支完全兼容且在一些发行版中已成为默认。这里我们安装MariaDB。5.1 Ubuntu/Debian 安装 MariaDBsudo apt install mariadb-server mariadb-client -y sudo systemctl start mariadb sudo systemctl enable mariadb5.2 CentOS/RHEL 安装 MariaDB# CentOS 7 sudo yum install mariadb-server mariadb -y # CentOS 8 / Rocky Linux 8 sudo dnf install mariadb-server mariadb -y sudo systemctl start mariadb sudo systemctl enable mariadb5.3 运行安全初始化脚本安装后强烈建议运行安全脚本设置root密码、移除匿名用户、禁止远程root登录等。sudo mysql_secure_installation根据提示一步步操作即可。对于新手在问及“切换到Unix socket认证”时可以回答“n”否以保留传统的密码登录方式。5.4 测试数据库连接登录MySQL/MariaDB控制台sudo mysql -u root -p输入你刚才设置的root密码。进入后可以创建一个测试数据库和用户CREATE DATABASE testdb; CREATE USER testuserlocalhost IDENTIFIED BY YourStrongPassword123!; GRANT ALL PRIVILEGES ON testdb.* TO testuserlocalhost; FLUSH PRIVILEGES; EXIT;然后你可以在PHP测试文件中使用mysqli_connect()或 PDO 来测试是否能连接这个数据库。6. 新手最常遇到的坑与解决方案即使按照步骤来也可能遇到问题。这里我总结几个新手高频踩坑点。6.1 访问PHP文件直接下载而不是执行现象浏览器访问.php文件弹出下载对话框或者显示纯文本代码。原因Nginx没有正确将PHP文件交给PHP-FPM处理。location ~ \.php$配置块没有生效或者fastcgi_pass指令配置错误。排查检查Nginx配置文件语法sudo nginx -t。确认fastcgi_pass指向正确。Ubuntu看socket文件是否存在CentOS看端口是否监听。Ubuntu:ls -la /var/run/php/CentOS:sudo ss -tlnp | grep 9000或sudo netstat -tlnp | grep 9000确认PHP-FPM服务正在运行sudo systemctl status php-fpm(Ubuntu可能是php8.1-fpm)。检查Nginx错误日志sudo tail -f /var/log/nginx/error.log然后刷新浏览器看是否有新错误信息。6.2 502 Bad Gateway 或 504 Gateway Time-out 错误现象浏览器显示502或504错误。原因Nginx无法与后端的PHP-FPM通信或者PHP-FPM处理超时。排查通信问题同6.1检查fastcgi_pass配置和PHP-FPM服务状态。在CentOS上确保防火墙没有阻止本地9000端口sudo firewall-cmd --list-all。权限问题检查网站目录如/var/www/myphpapp和其中文件的权限确保Nginx/PHP-FPM进程用户Ubuntu是www-dataCentOS是nginx有读取和执行权限。可以尝试临时将目录权限改为755文件权限改为644。资源问题PHP-FPM子进程可能因为内存不足或脚本错误而崩溃。查看PHP-FPM的错误日志Ubuntu:/var/log/php8.1-fpm.log(版本号可能不同)CentOS:/var/log/php-fpm/error.log6.3 PHP扩展未加载现象在phpinfo()页面里找不到你安装的扩展如mysqlnd,gd。原因扩展虽然安装了但可能没有被PHP配置文件加载。解决在Ubuntu上安装扩展包通常会自动创建配置文件在/etc/php/8.1/fpm/conf.d/对应FPM和/etc/php/8.1/cli/conf.d/对应命令行。重启PHP-FPM即可sudo systemctl restart php8.1-fpm。在CentOS上扩展通常通过主配置文件/etc/php.ini中的extension指令加载但使用包管理器安装后一般会自动配置好。同样重启PHP-FPMsudo systemctl restart php-fpm。你可以通过命令行快速检查某个扩展是否加载php -m | grep mysql。6.4 修改配置文件后不生效现象改了Nginx或PHP的配置刷新浏览器没变化。原因修改配置后没有重启或重载服务。黄金法则修改Nginx配置后sudo nginx -t(测试) -sudo systemctl reload nginx(平滑重载不影响现有连接) 或sudo systemctl restart nginx(完全重启)。修改PHP-FPM配置后sudo systemctl restart php-fpm(Ubuntu可能是php8.1-fpm)。修改PHP.ini等PHP核心配置后需要重启PHP-FPM服务才能生效。7. 下一步从“能用”到“好用”环境搭起来了能跑phpinfo()只是第一步。作为一个新手接下来你可以做这些事来巩固和深化7.1 安装一个代码编辑器或IDE在服务器上直接用vim写代码效率低。建议在本地电脑安装VSCode、PHPStorm等IDE通过SFTP插件将代码同步到服务器。或者直接在服务器上安装一个轻量级的Web代码编辑器如code-serverVSCode的网页版。7.2 学习使用 ComposerComposer是PHP的依赖管理工具就像Node.js的npm。现代PHP项目几乎都用它来管理第三方库如Laravel、Symfony框架。安装Composer# 全局安装 php -r copy(https://getcomposer.org/installer, composer-setup.php); php composer-setup.php php -r unlink(composer-setup.php); sudo mv composer.phar /usr/local/bin/composer使用示例在项目目录cd /var/www/myphpapp下初始化一个项目或安装一个包。7.3 尝试部署一个简单的PHP项目不要只停留在测试页。去GitHub找一个简单的PHP项目比如一个留言板、一个博客系统按照它的README尝试在你的新环境中配置和运行起来。这个过程会强迫你去理解虚拟主机配置、数据库导入、文件权限等实际问题。7.4 关注目录权限与安全生产环境中盲目使用chmod 777是极度危险的。要理解Linux文件权限用户、组、其他人读、写、执行。通常原则是给Web服务器进程www-data或nginx刚好够用的权限。日志、缓存等需要写入的目录可以单独设置组权限。环境搭建本身不是目的它只是你PHP学习之旅的起点。这个“快速版”流程帮你扫清了最初的障碍让你可以立刻开始写代码、做实验。记住遇到问题多查日志Nginx error log, PHP-FPM error log善用搜索引擎大部分你遇到的坑前人都已经踩过并留下了解决方案。
返回列表