PHP 跑起来,网务器服务器上至少得有一个能解析 PHP 的站运 Web 服务器,再配一个能存数据的行需数据库,外加 PHP 运行环境本身。网务器这三样凑齐,站运网站才算真正“活”了。行需很多人以为装个 Apache 就完事,网务器结果访问页面直接下载 index.php 文件——那就是站运缺了 PHP 模块。
Web 服务器这块,行需Apache 和 Nginx 是网务器主流。Apache 老牌,站运模块多,行需.htaccess 文件让配置改起来不用重启服务,网务器虚拟主机商最爱用。站运Nginx 高并发下省内存,行需静态文件处理快得离谱,现在新项目用它的越来越多。我见过一个日活两万的小论坛,从 Apache 换到 Nginx 后,同一台 2 核 4G 的机器 CPU 负载从 70% 掉到 20% 左右。当然,Nginx 处理 PHP 得靠 FastCGI 转发给 PHP-FPM,比 Apache 的 mod_php 多一层进程管理,但稳定性反而更好。
PHP 本身不用“安装到服务器”这种说法太笼统。准确讲,是装 PHP 解析器,再选一种和 Web 服务器对接的方式。mod_php 把 PHP 塞进 Apache 进程里,配置简单,但一个请求出错可能拖垮整个 Apache。PHP-FPM 独立进程池,每个池能设不同用户和资源限制,跑多个网站时隔离性好得多。PHP 版本也得留意,PHP 8.2 比 7.4 快不少,JIT 对计算密集型脚本提升明显,但老代码可能因为严格类型报错。上周帮人迁一个老商城,PHP 5.6 升到 8.1,光是 mysql_* 函数就得全改成 mysqli 或 PDO。
数据库这块,MySQL 和 MariaDB 几乎占了 PHP 网站的九成。MariaDB 是 MySQL 原作者另起炉灶的分支,兼容性基本没差,很多 Linux 发行版默认装的就是它。PostgreSQL 也有人用,复杂查询和 JSON 字段支持更好,但 PHP 生态里 MySQL 的教程和轮子多得多。SQLite 适合小站或原型开发,单文件、零配置,可一旦并发写入超过几十次每秒,锁表问题就来了。我自己的博客用 SQLite,每天几百访问量稳得很,但帮朋友做的秒杀demo一上SQLite就卡死。
操作系统层面,Linux 是绝对主力。CentOS 停更后,Ubuntu Server 和 Debian 成了新宠,Rocky Linux 也有人在用。Windows Server 跑 PHP 不是不行,但路径分隔符、权限模型、扩展兼容性都容易踩坑。IIS 配 PHP 得装 FastCGI 模块,改 php.ini 里的 extension_dir 路径要用反斜杠,稍不注意就加载不了扩展。除非公司内网全是 Windows 域环境,否则没必要自找麻烦。
内存和 CPU 看流量。一个纯动态的 WordPress 站点,没缓存的话,1 核 1G 跑起来都喘。加个 Redis 或者 Memcached 做对象缓存,再上 OPcache 缓存字节码,同样配置能扛住每天几千 IP。OPcache 一定要开,它把 PHP 脚本编译后的中间码存内存里,省掉每次请求重新解析的开销,性能提升立竿见影。我测过一个 Laravel 项目,开 OPcache 后响应时间从 120ms 降到 45ms。
带宽和硬盘倒不用太纠结。PHP 网站主要吃 CPU 和内存,硬盘用 SSD 就行,机械盘读大量小文件会拖慢。带宽看图片和视频多不多,纯文字站 1M 带宽都够。真正容易忽略的是文件描述符限制和 PHP-FPM 的进程数配置。ulimit 设太低,高并发时 accept 失败;pm.max_children 设太大,内存直接爆。这些得根据实际压测调,没有万能值。
最后提一句,现在很多人用 Docker 把 Nginx、PHP-FPM、MySQL 各跑一个容器,编排用 docker-compose。好处是环境一致,换服务器直接搬镜像。坏处是网络和存储卷配置得学一阵,新手容易把数据库数据弄丢。传统 apt 或 yum 装一套也没问题,就是迁移时得把配置文件、扩展、版本都对一遍。选哪种看团队习惯,没有绝对优劣。