直接安装官方源的php包、php-fpm和nginx,配置fastcgi_pass与php.ini,95%的php网站即可运行;避免盲目编译或依赖不可控的一键脚本。

直接装官方源的 php 包 + php-fpm + nginx,再配好 fastcgi_pass 和 php.ini,95% 的 PHP 网站都能跑起来。别一上来就编译,也别迷信一键脚本——它们要么版本太旧,要么改了你根本不知道的地方。
怎么选 Web 服务器:Nginx 还是 Apache?
看你要跑什么项目:
– 如果是 WordPress、Laravel、静态资源多、或将来要扛并发,nginx 是更轻、更稳的选择;
– 如果你依赖 .htaccess 重写、用老旧 CMS(比如某些 Drupal 插件)、或者团队熟悉 Apache 配置,apache2 更省心。
注意:apache2 在 Ubuntu/Debian 上默认走 mod_php,启动快但内存占用高;nginx 必须配 php-fpm,多一层转发但隔离性好、资源可控。
别混着装:同一台机器上同时启用 apache2 和 nginx 的 80 端口会冲突,得手动改端口或停一个。
PHP 版本和扩展怎么一次性装齐?
Ubuntu/Debian 推荐装 php8.1 或 php8.2(不是最新版 php8.5),因为主流框架已全面适配,安全更新也稳定:
– sudo apt install php8.2 php8.2-cli php8.2-fpm php8.2-mysql php8.2-curl php8.2-gd php8.2-mbstring php8.2-xml php8.2-zip -y
CentOS/RHEL 8+ 必须先启用 Remi 仓库:
– sudo dnf module enable php:remi-8.2
– sudo dnf install php php-mysqlnd php-curl php-gd php-mbstring php-xml php-zip -y
装完立刻验证:
– php -v 看是否输出 8.2.x
– php -m | grep -E "(mysql|curl|mbstring)" 确保关键模块在列表里
漏装 php-mbstring 会导致 Laravel 启动报错,php-xml 缺失会让 Composer 安装包失败——这些不是“可选”,是硬依赖。
为什么 Nginx 总是 502 Bad Gateway?
90% 是 fastcgi_pass 指向错误或权限不匹配:
– 先确认 php-fpm 在跑:sudo systemctl status php8.2-fpm(Ubuntu)或 sudo systemctl status php-fpm(RHEL)
– 查 php-fpm 实际监听路径:sudo grep "^listen =" /etc/php/8.2/fpm/pool.d/www.conf(Ubuntu)或 sudo grep "^listen =" /etc/php-fpm.d/www.conf(RHEL)
– 对应改 Nginx 配置里的 fastcgi_pass,例如:fastcgi_pass unix:/run/php/php8.2-fpm.sock;(Unix socket)或 fastcgi_pass 127.0.0.1:9000;(TCP)
– 检查 socket 文件属主:ls -l /run/php/php8.2-fpm.sock,必须是 www-data:www-data(Ubuntu)或 nginx:nginx(RHEL)
– 最后别忘 reload:sudo systemctl reload nginx,不是 restart。
php.ini 改了为啥不生效?
因为 CLI、FPM、Apache 加载的是不同位置的 php.ini:
– 查当前 Web 环境用的配置:php --ini | grep "Loaded Configuration File",结果通常是 /etc/php/8.2/fpm/php.ini(Nginx + FPM 场景)
– 修改后必须重启对应服务:sudo systemctl restart php8.2-fpm(不是 php 命令本身)
常见改项:
– date.timezone = Asia/Shanghai(否则 date() 报警告)
– error_reporting = E_ALL + display_errors = On(开发阶段必开)
– upload_max_filesize = 64M 和 post_max_size = 64M(两者都得调,且 post_max_size ≥ upload_max_filesize)
改完不重启服务,等于没改。
最易被忽略的一点:所有配置改完后,一定要用 phpinfo() 页面验证——别只信命令行输出。因为 Web 请求走的是 FPM 子进程,它加载的 ini 文件、扩展、环境变量,和你在终端敲 php -v 看到的可能完全不是一回事。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











