能直接用包管理器装好就别源码编译,除非需特定php小版本或未打包扩展;web服务器选apache(配置简单、.htaccess开箱即用)或nginx(轻量高并发,但须配php-fpm);务必显式安装php-fpm及所需扩展,正确配置socket权限与nginx fastcgi_pass,改php.ini后必须重启php-fpm,phpinfo()才是版本与配置的唯一真相。

能直接用包管理器装好就别源码编译——除非你明确需要某个未打包的PHP小版本,或必须启用某个未启用的扩展(比如 sodium 或 igbinary)。
Web服务器选Nginx还是Apache?看你的实际需求
Apache自带mod_php,配置简单,.htaccess开箱即用,适合WordPress类项目快速上线;Nginx更轻量、并发高,但必须配PHP-FPM才能跑PHP,多一层转发,出问题时排查链路更长。如果你只是部署一个Laravel或ThinkPHP项目,且不依赖.htaccess重写规则,选Nginx更省资源。Ubuntu/Debian默认用www-data用户,CentOS/RHEL系默认是nginx或apache用户,后续所有权限、socket属主都得对齐这个用户,否则502错误大概率由此而来。
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
PHP版本和扩展不能只装php包,必须显式指定扩展名
只运行sudo apt install php在Ubuntu上只会装CLI版,不带FPM也不带MySQL驱动——php -v能显示版本,但Nginx一访问.php就报502。正确做法是:
- Ubuntu/Debian:sudo apt install php8.1 php8.1-fpm php8.1-mysql php8.1-curl php8.1-mbstring php8.1-xml php8.1-zip
- CentOS 8+/AlmaLinux:sudo dnf module enable php:remi-8.1 && sudo dnf install php-fpm php-mysqlnd php-curl php-mbstring php-xml php-zip
漏掉php8.1-fpm或php-fpm,systemctl start php-fpm会失败;漏掉php8.1-mysql,PDO连接MySQL直接抛Class 'PDO' not found。
PHP-FPM监听方式选Unix socket还是TCP?优先用socket
编辑/etc/php/*/fpm/pool.d/www.conf(Ubuntu)或/etc/php-fpm.d/www.conf(RHEL系),关键三行必须核对:
- listen = /run/php/php8.1-fpm.sock(推荐,比127.0.0.1:9000少一次网络栈开销)
- listen.owner = www-data(Ubuntu)或listen.owner = nginx(CentOS)
- user = www-data 和 group = www-data(保持一致)
改完必须sudo systemctl restart php-fpm,否则Nginx连不上socket文件。常见坑:socket路径写错(比如漏了php8.1-前缀),或listen.mode没设成0660导致Nginx进程无权读取。
Nginx配置里location ~ \.php$块必须包含fastcgi_pass和SCRIPT_FILENAME
在站点配置里(如/etc/nginx/sites-available/default),这段不能少也不能简写:
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}
其中snippets/fastcgi-php.conf在Ubuntu里默认存在,它已定义fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;——这行决定了PHP脚本的真实路径。如果自己手写,漏掉这行,$_SERVER['SCRIPT_FILENAME']为空,phpinfo()都打不开。另外,root指令必须在server块里明确定义,不能只靠index.php自动推导。最常被跳过的一步:改完php.ini后忘了重启php-fpm服务——php --ini看到的配置路径和phpinfo()里显示的不是一回事,后者取决于FPM加载的配置。别信php -v输出的版本号,phpinfo()才是唯一真相。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










