>前言
在 Ubuntu 上搭建 LAMP(Linux + Apache + MySQL + PHP)环境后,配置虚拟主机(VirtualHost)是让一台服务器同时托管多个网站的关键步骤。本文将详细介绍两种主流方式——模块方式和 PHP-FPM 方式,帮助你快速完成配置。
>一、环境准备
>1.1 更新系统并安装组件
>sudo apt update && sudo apt upgrade -y
1.2 安装 Apache
>sudo apt install apache2 -y
sudo systemctl start apache2 && sudo systemctl enable apache2
1.3 安装 MySQL
>sudo apt install mysql-server -y
sudo systemctl start mysql && sudo systemctl enable mysql
安装完成后建议运行安全脚本:
>sudo mysql_secure_installation
1.4 安装 PHP
模块方式(简单场景推荐):
>sudo apt install php libapache2-mod-php php-mysql -y
FPM 方式(生产环境推荐,性能更好):
>sudo apt install php-fpm php-mysql -y
1.5 防火墙配置
>sudo ufw allow 'Apache Full'
sudo ufw enable
二、创建站点目录与设置权限
>2.1 创建项目目录
以 example.com 为例:
>sudo mkdir -p /var/www/example.com
2.2 创建测试页面
>echo '' | sudo tee /var/www/example.com/index.php
2.3 设置目录权限
>sudo chown -R www-data:www-data /var/www/example.com
sudo chmod -R 755 /var/www/example.com
> 说明:www-data 是 Apache 在 Ubuntu 上的默认运行用户,确保目录属主正确是避免 403 错误的关键。
>三、配置虚拟主机
>方式 A:模块方式(libapache2-mod-php)
适合个人项目或快速搭建场景,配置简单直观。
1)复制默认配置
>sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/example.com.conf
2)编辑配置文件
>sudo nano /etc/apache2/sites-available/example.com.conf
修改以下关键项:
>
ServerName example.com
ServerAlias www.example.com(可选)
DocumentRoot /var/www/example.com
- 在
内添加 段,设置 AllowOverride All 和 Require all granted
3)启用站点并重载
>sudo a2ensite example.com.conf
sudo a2dissite 000-default.conf # 可选,禁用默认站点
sudo systemctl reload apache2
4)调整目录索引优先级
如果 index.php 未被优先解析,编辑 /etc/apache2/mods-enabled/dir.conf,将 index.php 移到最前面。
>方式 B:PHP-FPM 方式(推荐)
性能更优,适合生产环境,支持更好的进程隔离。
1)启用必要模块
>sudo a2enmod proxy proxy_fcgi rewrite
2)确认 PHP-FPM 监听配置
编辑 /etc/php/8.3/fpm/pool.d/www.conf(版本号按实际调整):
Unix 套接字方式:listen = /run/php/php8.3-fpm.sock
TCP 方式:listen = 127.0.0.1:9000
3)创建虚拟主机配置
>sudo nano /etc/apache2/sites-available/example.com.conf
写入以下内容:
>
ServerAdmin webmaster@example.com
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
ErrorLog ${APACHE_LOG_DIR}/example.error.log
CustomLog ${APACHE_LOG_DIR}/example.access.log combined
SetHandler "proxy:unix:/run/php/php8.3-fpm.sock|fcgi://localhost/"
4)启用并验证
>sudo a2ensite example.com.conf
sudo a2dissite 000-default.conf
sudo apache2ctl configtest # 应显示 Syntax OK
sudo systemctl reload apache2
sudo systemctl start php8.3-fpm && sudo systemctl enable php8.3-fpm
四、DNS 与本地解析
>4.1 本机测试
编辑 /etc/hosts(Linux/macOS)添加:
>你的服务器IP example.com www.example.com
4.2 线上环境
在域名 DNS 管理面板中:
添加 A 记录,将域名指向服务器 IPv4 地址
如需 www 前缀,添加 CNAME 记录或额外 A 记录
>五、常见问题排查
| 问题 | 可能原因 | 解决方案 |
|------|---------|---------|
| 403 Forbidden | 目录权限不足 | 检查 中 Require all granted,确认目录权限为 755、属主 www-data |
| 404 Not Found | 路径或首页文件错误 | 确认 DocumentRoot 路径正确,index.php 存在,DirectoryIndex 包含 index.php |
| PHP 不解析 | FPM 配置错误 | 核对 SetHandler 中 sock 路径与版本;模块方式确认 libapache2-mod-php 已安装 |
| 端口无法访问 | 防火墙未放行 | UFW 放行 Apache Full(80/443),云服务器安全组同样需开放 |
>查看日志定位问题
>
Apache 站点错误日志
tail -n 50 /var/log/apache2/example.error.log
>PHP-FPM 日志
tail -n 50 /var/log/php8.3-fpm.log
> 安全提示:测试完成后务必删除 info.php,避免泄露服务器信息。
>总结
Ubuntu LAMP 环境下配置虚拟主机并不复杂,核心步骤就是:创建目录 → 编写配置 → 启用站点 → 解析域名。对于生产环境,建议优先选择 PHP-FPM 方式,它在并发处理和安全性方面表现更优。遇到问题时,优先查看 Apache 和 PHP-FPM 的错误日志,大多数配置问题都能从中找到线索。