PHP + Apache 服务器搭建全指南

本文将详细介绍如何在Linux系统上搭建基于PHP和Apache的Web服务器环境,内容涵盖从基础安装到高级配置的所有步骤,适合初学者及需要复习相关知识的开发者参考使用。
前期准备
1 系统要求
组件 | 最低版本建议 | 备注 |
---|---|---|
Linux发行版 | Ubuntu 20.04 LTS+ | CentOS/Debian等也可兼容 |
RAM | ≥512MB | 推荐1GB以上以获得更好性能 |
磁盘空间 | ≥5GB空闲 | 根据项目规模调整 |
SSH访问 | 必需 | 用于远程管理(本地可忽略此项) |
注意:以下操作均以Ubuntu为例,其他发行版命令可能有细微差异但逻辑相同。
2 更新软件源缓存
sudo apt update && sudo apt upgrade -y
此命令确保我们使用的是最新的软件包索引,避免因旧数据导致的依赖冲突问题。
安装Apache Web服务器
1 基础安装过程
执行以下命令完成Apache核心组件部署:

sudo apt install apache2 -y
安装完成后可通过以下方式验证服务状态:
systemctl status apache2
预期输出应显示绿色活跃状态(active (running)),若未启动则运行:
sudo systemctl start apache2
并设置开机自启:
sudo systemctl enable apache2
2 配置防火墙规则
为允许HTTP流量通过防火墙,需添加相应规则:

sudo ufw allow in "Apache Full" # 快速放行所有端口 # 或精确控制单个端口(默认80) sudo ufw allow 80/tcp comment 'HTTP'
使用sudo ufw status numbered
检查规则是否生效。
3 测试页面访问
打开浏览器输入服务器IP地址(如http://your_server_ip
),应能看到默认的Apache欢迎页面,这表明基础环境已正常工作。
集成PHP解析器
1 安装PHP及其扩展库
推荐安装常用模块集合:
sudo apt install libapache2-mod-php8.1 php8.1 php8.1-mysql php8.1-xml php8.1-gd php8.1-curl -y
版本说明:此处以PHP 8.1为例,可根据需求替换为其他稳定版本(如PHP 7.4),数字后缀代表具体小版本号。
2 启用PHP模块并重启服务
加载Apache中的PHP处理程序:
sudo a2enmod php8.1 # 启用对应版本的模块 sudo systemctl restart apache2
创建测试脚本验证功能是否正常:在网站根目录(通常是/var/www/html
)新建info.php
如下:
<?php phpinfo(); ?>
访问该URL(例如http://your_server_ip/info.php
),若能正常显示PHP配置信息则说明集成成功。
3 常见错误排查表
现象 | 可能原因 | 解决方案 |
---|---|---|
下载静态资源而非解析 | .htaccess缺失或权限不足 | 确保DocumentRoot路径正确 |
空白页面无报错提示 | error_log未开启记录 | 修改日志级别为debug模式 |
“No input file specified” | FastCGI进程通信异常 | 检查mod_fastcgi是否已加载 |
虚拟主机配置实践
当需要托管多个域名时,可以通过虚拟主机实现隔离管理,以下是两种典型场景的配置示例:
方案A:基于名称的虚拟主机(同一IP不同域名)
编辑主配置文件:
sudo nano /etc/apache2/sites-available/default-ssl.conf
添加新站点块示例:
<VirtualHost :80> ServerAdmin admin@example.com ServerName www.example.com DocumentRoot /var/www/example.com/public_html ErrorLog ${APACHE_LOG_DIR}/example_error.log CustomLog ${APACHE_LOG_DIR}/example_access.log combined </VirtualHost>
启用站点并重新加载配置:
sudo a2ensite example.com.conf # 假设保存为该名称的文件 sudo systemctl reload apache2 # 应用变更而不中断现有连接
方案B:基于端口号的区分(适用于开发环境)
修改端口监听参数:
Listen 8080 # 新增监听端口 <VirtualHost :8080> # 对应新的端口号 ...原有配置项... </VirtualHost>
记得同步更新防火墙规则允许新端口流入。
安全加固措施
1 目录权限优化
遵循最小权限原则设置文件夹归属:
sudo chown -R www-data:www-data /var/www/html # www-data是Apache运行用户组 sudo find /var/www -type d -exec chmod 755 {} \; # 递归设置目录权限为rwxr-xr-x sudo find /var/www -type f -exec chmod 644 {} \; # 文件权限设为rw-r--r--
警告:切勿将敏感目录(如/etc/passwd)暴露给Web用户!
2 SSL证书部署(可选但强烈推荐)
使用Let's Encrypt免费证书实现HTTPS加密传输:
sudo apt install snapd # 如果尚未安装Snap工具链 sudo snap install core; sudo snap refresh # 确保Core更新至最新状态 sudo snap install --classic certbot # 安装Certbot客户端 sudo certbot certonly --apache # 自动配置SSL并续期提醒
按照交互式向导完成域名验证后,Apache会自动生成相应的443端口监听规则,此后应强制重定向到HTTPS版本:
RewriteEngine On RewriteCond %{HTTPS} !=on [NC] # NC表示不区分大小写匹配 RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] # 永久重定向至HTTPS
性能调优建议
参数 | 默认值 | 推荐调整范围 | 作用说明 |
---|---|---|---|
KeepAlive | Off | On | 持久连接减少TCP握手开销 |
MaxKeepAliveRequests | 100 | 200~500 | 单次长连接允许的最大请求数 |
StartServers | 5 | 根据CPU核心数增减 | 初始启动的工作进程数量 |
MinSpareServers | 5 | 同上 | 保持备用进程应对突发流量 |
MaxSpareServers | 10 | 动态监控负载决定 | 最大闲置进程上限 |
修改方式:编辑/etc/apache2/apache2.conf
文件中的相关指令后重启服务生效。
常见问题与解答栏目
Q1: 为什么修改了PHP代码却没有看到变化?
A: 可能原因包括:①OpCache缓存未刷新(尝试重启Apache或执行killall -USR2 php-fpm
);②浏览器缓存旧版本(按Ctrl+F5强制刷新);③文件上传覆盖失败(检查所有者权限),解决方法依次排查上述可能性。
Q2: 如何限制某个IP段访问特定目录?
A: 可在对应目录的.htaccess
文件中添加如下规则:
Order deny,allow Deny from all Allow from 192.168.1.0/24 # 仅允许内网指定子网访问
或者直接在虚拟主机配置中使用Require local
等指令