在Linux系统中配置PHP服务器是许多开发者和系统管理员的基本技能,本文将详细介绍在主流Linux发行版(如Ubuntu/Debian和CentOS/RHEL)上通过Apache和Nginx两种Web服务器搭建PHP环境的完整步骤,包括安装配置、安全优化及常见问题处理。

环境准备与系统更新
在开始配置前,确保系统已更新至最新状态,避免因软件包版本过旧导致兼容性问题,以Ubuntu/Debian为例,执行以下命令:
sudo apt update && sudo apt upgrade -y
对于CentOS/RHEL系统,需先安装EPEL仓库,再更新系统:
sudo yum install epel-release -y && sudo yum update -y
确保系统已安装必要的编译工具(如build-essential或gcc),后续编译安装PHP扩展时可能需要用到。
通过Apache配置PHP服务器
Apache是一款成熟的开源Web服务器,与PHP的集成历史悠久,配置简单。

安装Apache与PHP
以Ubuntu/Debian为例,使用apt安装:
sudo apt install apache2 php libapache2-mod-php -y
对于CentOS/RHEL系统,使用yum或dnf:
sudo yum install httpd php php-mysql -y # CentOS 7及以下 sudo dnf install httpd php php-mysql -y # CentOS 8+
安装完成后,启动Apache并设置开机自启:
sudo systemctl start apache2 # Ubuntu/Debian为apache2,CentOS/RHEL为httpd sudo systemctl enable apache2
配置PHP与Apache集成
Apache通过模块方式加载PHP,Ubuntu/Debian默认已安装libapache2-mod-php模块,无需额外配置,CentOS/RHEL需确保php包包含mod_php模块(较新版本默认集成)。
验证PHP模块是否加载:
sudo apache2ctl -M | grep php # Ubuntu/Debian sudo httpd -M | grep php # CentOS/RHEL
若输出包含php7_module(版本号可能不同),则表示模块已正确加载。
测试PHP页面
创建PHP测试文件,默认网站目录为/var/www/html(Ubuntu/Debian)或/var/www/html(CentOS/RHEL):
sudo nano /var/www/html/info.php
<?php phpinfo(); ?>
保存后,在浏览器访问http://服务器IP/info.php,若显示PHP详细信息页面,则说明配置成功。
注意:生产环境中需删除info.php文件,避免泄露服务器敏感信息。
通过Nginx配置PHP服务器
Nginx以其高性能、低资源占用著称,常用于高并发场景,需通过FastCGI与PHP集成(通常搭配PHP-FPM使用)。
安装Nginx与PHP-FPM
Ubuntu/Debian系统:
sudo apt install nginx php-fpm -y
CentOS/RHEL系统:
sudo yum install nginx php-fpm -y # CentOS 7及以下 sudo dnf install nginx php-fpm -y # CentOS 8+
安装完成后,启动Nginx和PHP-FPM并设置开机自启:
sudo systemctl start nginx php-fpm sudo systemctl enable nginx php-fpm
配置Nginx支持PHP
Nginx需通过fastcgi_pass将PHP请求转发给PHP-FPM处理,修改默认站点配置文件/etc/nginx/sites-available/default(Ubuntu/Debian)或/etc/nginx/conf.d/default.conf(CentOS/RHEL):
sudo nano /etc/nginx/sites-available/default
找到location ~ \.php$部分,确保配置如下:
location ~ \.php$ {
root /var/www/html;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; # Ubuntu/Debian,路径可能因版本不同
# fastcgi_pass 127.0.0.1:9000; # CentOS/RHEL或TCP方式
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
注意:fastcgi_pass的路径需与PHP-FPM配置一致,Ubuntu/Debian的PHP-FPM套接字文件通常位于/var/run/php/php{版本}-fpm.sock,可通过ls /var/run/php/查看;CentOS/RHEL默认使用TCP(0.0.1:9000)。
修改PHP-FPM配置(可选)
若需调整PHP-FPM进程数,编辑/etc/php/{版本}/fpm/pool.d/www.conf(Ubuntu/Debian)或/etc/php-fpm.d/www.conf(CentOS/RHEL),修改pm、pm.max_children、pm.start_servers等参数,优化性能:
pm = dynamic pm.max_children = 50 pm.start_servers = 2 pm.min_spare_servers = 1 pm.max_spare_servers = 3
修改后重启PHP-FPM:
sudo systemctl restart php-fpm
测试PHP页面
与Apache类似,创建/var/www/html/info.php为<?php phpinfo(); ?>,然后在浏览器访问http://服务器IP/info.php,确认PHP正常解析。
PHP常用配置与优化
修改PHP配置文件
PHP主配置文件为/etc/php/{版本}/php.ini(Ubuntu/Debian)或/etc/php.ini(CentOS/RHEL),可根据需求调整以下参数:
| 参数 | 默认值 | 推荐值 | 说明 |
|---|---|---|---|
upload_max_filesize |
2M | 32M | 上传文件最大大小 |
post_max_size |
8M | 32M | POST数据最大大小 |
memory_limit |
128M | 256M | PHP脚本内存限制 |
max_execution_time |
30 | 300 | 脚本最大执行时间(秒) |
date.timezone |
无 | Asia/Shanghai | 设置时区 |
修改后需重启Web服务器(Apache/Nginx)和PHP-FPM(如修改了PHP-FPM配置)使配置生效。
安装PHP扩展
通过apt(Ubuntu/Debian)或yum/dnf(CentOS/RHEL)安装常用扩展,如MySQL支持、GD库等:
# Ubuntu/Debian sudo apt install php-mysql php-gd php-curl php-xml php-mbstring -y # CentOS/RHEL sudo yum install php-mysqlnd php-gd php-curl php-xml php-mbstring -y
安装后重启PHP-FPM:sudo systemctl restart php-fpm。
安全配置建议
- 禁用危险函数:在
php.ini中设置disable_functions,禁用exec、system、shell_exec等可能被恶意利用的函数。 - 限制文件访问权限:网站目录
/var/www/html权限建议设为755,文件权限设为644,避免Web服务器用户以外的用户修改文件。 - 使用HTTPS:通过Let's Encrypt免费证书配置HTTPS,加密数据传输。
- 定期更新软件:及时更新Apache/Nginx、PHP及扩展版本,修复安全漏洞。
常见问题排查
- 页面显示PHP代码而非解析结果:
- Apache:检查
libapache2-mod-php是否安装,模块是否加载。 - Nginx:检查
fastcgi_pass路径是否正确,PHP-FPM是否运行。
- Apache:检查
- 上传文件失败:检查
php.ini中upload_max_filesize和post_max_size是否足够,网站目录是否有写入权限。
相关问答FAQs
Q1: 如何在Linux系统中查看PHP版本?
A1: 通过命令行执行php -v或phpinfo()查看,若系统默认PHP命令不可用,可尝试php{版本} -v(如php7.4 -v),或检查/usr/bin/php路径。
Q2: 配置完成后,访问PHP页面显示404错误怎么办?
A2: 首先确认文件路径是否正确(默认为/var/www/html),检查Nginx/Apache的网站配置中root参数是否指向正确目录,以及文件权限是否为644、目录权限为755,对于Nginx,还需检查location规则是否匹配PHP文件后缀。
