一、核心概念概述
虚拟主机(Virtual Host)是指在一台服务器上运行多个网站,每个网站拥有独立的域名和配置。在Ubuntu LAMP(Linux+Apache+MySQL+PHP)环境中,Apache支持两种虚拟主机配置方式:
– 基于域名的虚拟主机(推荐,使用不同域名)
– 基于IP的虚拟主机(使用不同IP地址)
二、环境准备
2.1 安装LAMP环境
确保已安装Ubuntu 22.04并配置LAMP:
sudo apt update
sudo apt install apache2 mysql-server php libapache2-mod-php php-mysql
2.2 配置防火墙
开放HTTP(80)和HTTPS(443)端口:
sudo ufw allow 'Apache Full'
sudo ufw reload
三、虚拟主机配置步骤
3.1 创建网站根目录
为每个网站创建独立根目录:
sudo mkdir -p /var/www/example.com/public_html
sudo mkdir -p /var/www/test.com/public_html
3.2 设置权限
确保Apache用户(www-data)拥有读写权限:
sudo chown -R www-data:www-data /var/www/example.com/public_html
sudo chown -R www-data:www-data /var/www/test.com/public_html
sudo chmod -R 755 /var/www/
3.3 创建测试文件
在每个根目录下创建index.html:
sudo nano /var/www/example.com/public_html/index.html
内容:
<!DOCTYPE html>
<html>
<head>
<title>Example.com</title>
</head>
<body>
<h1>Welcome to Example.com!</h1>
<p>This is a test page for Example.com.</p>
</body>
</html>
3.4 配置Apache虚拟主机
3.4.1 创建虚拟主机配置文件
为每个网站创建配置文件:
sudo nano /etc/apache2/sites-available/example.com.conf
内容:
<VirtualHost *:80>
ServerAdmin webmaster@example.com
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com/public_html
ErrorLog ${APACHE_LOG_DIR}/example.com.error.log
CustomLog ${APACHE_LOG_DIR}/example.com.access.log combined
</VirtualHost>
3.4.2 启用虚拟主机
启用配置文件并重启Apache:
sudo a2ensite example.com.conf
sudo a2ensite test.com.conf
sudo systemctl restart apache2
3.4.3 测试配置
检查Apache配置是否正确:
sudo apache2ctl configtest
四、域名解析与绑定
4.1 域名解析
在域名注册商后台添加A记录:
– 域名:example.com
– 记录类型:A
– 记录值:服务器公网IP(如192.168.1.100)
– TTL:300(5分钟)
4.2 本地测试(可选)
修改本地hosts文件测试:
sudo nano /etc/hosts
添加:
192.168.1.100 example.com www.example.com
192.168.1.100 test.com www.test.com
五、Apache SSL配置(HTTPS)
5.1 安装Certbot
sudo apt install certbot python3-certbot-apache
5.2 获取SSL证书
sudo certbot --apache -d example.com -d www.example.com
按照提示完成配置,Certbot会自动修改Apache配置并重启服务。
5.3 测试HTTPS
访问https://example.com,确认证书有效。
六、测试与优化
6.1 测试虚拟主机
- 访问http://example.com,查看测试页面
- 访问http://test.com,查看测试页面
- 访问https://example.com,查看HTTPS页面
6.2 优化建议
- 启用Apache缓存,提升性能
- 配置Gzip压缩,减少传输大小
- 定期备份虚拟主机配置和网站数据
七、常见问题解答
Q1: 虚拟主机不生效?
A: 检查:
– Apache配置是否正确(apache2ctl configtest)
– 虚拟主机是否启用(a2ensite)
– 域名解析是否正确
– 防火墙是否开放80/443端口
Q2: 权限问题?
A: 确保网站根目录权限为755,文件权限为644,所有者为www-data。
Q3: SSL证书续期?
A: Certbot默认自动续期,可测试续期:
sudo certbot renew --dry-run
Q4: 如何禁用虚拟主机?
A: 使用a2dissite命令:
sudo a2dissite example.com.conf
sudo systemctl restart apache2
八、总结
Ubuntu LAMP环境下配置Apache虚拟主机的关键步骤包括:创建网站根目录、设置权限、配置虚拟主机、域名解析、SSL配置。通过合理配置虚拟主机,可以在一台服务器上运行多个网站,提升服务器利用率。
注:本文基于Ubuntu 22.04、Apache 2.4、Certbot 1.21版本编写,具体实现可根据实际环境调整。