一、多 Web 主机的核心原理
二、准备工作:环境检查与依赖安装
环境检查
1、系统版本:建议使用 Debian 11/12(本文以 Debian 12 为例),通过lsb_release -a可查看当前版本。
2、网络配置:服务器需有公网 IP(或内网可访问的 IP),并确保 80(HTTP)、443(HTTPS)端口已开放(通过ufw allow 80/tcp和ufw allow 443/tcp配置防火墙)。
3、域名解析:提前将需要绑定的域名(如site1.example.com、site2.example.com)解析到服务器 IP(可在域名服务商的 DNS 控制台设置 A 记录)。
基础依赖安装
# 更新系统包列表
sudo apt update && sudo apt upgrade -y
# 安装常用工具(可选但推荐)
sudo apt install -y vim wget curl net-tools
三、基于 Nginx 的多 Web 主机配置
步骤 1:安装 Nginx
# 安装Nginx
sudo apt install -y nginx
# 启动服务并设置开机自启
sudo systemctl start nginx
sudo systemctl enable nginx
步骤 2:创建网站目录与测试文件
# 创建目录(以site1.example.com和site2.example.com为例)
sudo mkdir -p /var/www/site1.example.com/html
sudo mkdir -p /var/www/site2.example.com/html
# 设置目录所有者(避免权限问题)
sudo chown -R $USER:$USER /var/www/site1.example.com/html
sudo chown -R $USER:$USER /var/www/site2.example.com/html
# 设置目录权限
sudo chmod -R 755 /var/www
# 为site1创建首页
echo "<h1>Welcome to site1.example.com</h1>" | sudo tee /var/www/site1.example.com/html/index.html
# 为site2创建首页
echo "<h1>Welcome to site2.example.com</h1>" | sudo tee /var/www/site2.example.com/html/index.html
步骤 3:配置 Nginx 虚拟主机
配置第一个虚拟主机(site1.example.com)
sudo vim /etc/nginx/sites-available/site1.example.com
server {
listen 80; # 监听80端口(HTTP)
server_name site1.example.com www.site1.example.com; # 绑定的域名
root /var/www/site1.example.com/html; # 网站根目录
index index.html index.htm; # 默认首页文件
# 日志配置(便于排查问题)
access_log /var/log/nginx/site1_access.log;
error_log /var/log/nginx/site1_error.log;
# 静态文件处理
location / {
try_files $uri $uri/ =404; # 尝试访问文件,不存在则返回404
}
}
配置第二个虚拟主机(site2.example.com)
sudo vim /etc/nginx/sites-available/site2.example.com
server {
listen 80;
server_name site2.example.com www.site2.example.com;
root /var/www/site2.example.com/html;
index index.html index.htm;
access_log /var/log/nginx/site2_access.log;
error_log /var/log/nginx/site2_error.log;
location / {
try_files $uri $uri/ =404;
}
}
步骤 4:启用虚拟主机并验证配置
1、启用配置:通过软链接将 sites-available 中的配置文件关联到 sites-enabled(Nginx 默认读取后者的配置):
sudo ln -s /etc/nginx/sites-available/site1.example.com /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/site2.example.com /etc/nginx/sites-enabled/
2、检查配置语法:Nginx 对配置格式非常严格,需先验证:
sudo nginx -t
3、重启 Nginx:使配置生效:
sudo systemctl restart nginx
步骤 5:测试访问
- 检查域名解析:ping site1.example.com是否指向服务器 IP。
- 查看 Nginx 日志:tail -f /var/log/nginx/site1_error.log定位错误原因。
- 检查防火墙:sudo ufw status确认 80 端口已开放。
三、基于 Apache 的多 Web 主机配置
步骤 1:安装 Apache
sudo apt install -y apache2# 启动并设置自启sudo systemctl start apache2sudo systemctl enable apache2
步骤 2:创建网站目录(与 Nginx 相同)
sudo mkdir -p /var/www/site1.example.com/html
sudo mkdir -p /var/www/site2.example.com/html
sudo chown -R $USER:$USER /var/www/site1.example.com/html
sudo chown -R $USER:$USER /var/www/site2.example.com/html
sudo chmod -R 755 /var/www
# 写入测试页面(同上)
echo "<h1>Welcome to site1.example.com</h1>" | sudo tee /var/www/site1.example.com/html/index.html
echo "<h1>Welcome to site2.example.com</h1>" | sudo tee /var/www/site2.example.com/html/index.html
步骤 3:配置 Apache 虚拟主机
配置site1.example.com
sudo vim /etc/apache2/sites-available/site1.example.com.conf
<VirtualHost *:80>
ServerName site1.example.com
ServerAlias www.site1.example.com
DocumentRoot /var/www/site1.example.com/html
ErrorLog ${APACHE_LOG_DIR}/site1_error.log
CustomLog ${APACHE_LOG_DIR}/site1_access.log
combined
</VirtualHost>
配置site2.example.com
sudo vim /etc/apache2/sites-available/site2.example.com.conf
<VirtualHost *:80>
ServerName site2.example.com
ServerAlias www.site2.example.com
DocumentRoot /var/www/site2.example.com/html
ErrorLog ${APACHE_LOG_DIR}/site2_error.log
CustomLog ${APACHE_LOG_DIR}/site2_access.log
combined
</VirtualHost>
步骤 4:启用虚拟主机并重启 Apache
启用配置:Apache 通过a2ensite命令启用站点(无需手动创建软链接):
sudo a2ensite site1.example.com.conf
sudo a2ensite site2.example.com.conf
禁用默认站点(避免冲突):
sudo a2dissite 000-default.conf
检查配置语法:
sudo apache2ctl configtest
重启 Apache:
sudo systemctl restart apache2
四、配置 HTTPS:让网站更安全
步骤 1:安装 Certbot 工具
# 安装Certbot及Nginx/Apache插件
# 若使用Nginx:
sudo apt install -y certbot python3-certbot-nginx
# 若使用Apache:
sudo apt install -y certbot python3-certbot-apache
步骤 2:为域名申请证书并自动配置
# Nginx用户
sudo certbot --nginx -d site1.example.com -d www.site1.example.com
sudo certbot --nginx -d site2.example.com -d www.site2.example.com
# Apache用户
sudo certbot --apache -d site1.example.com -d www.site1.example.com
sudo certbot --apache -d site2.example.com -d www.site2.example.com
五、常见问题与解决方案
1、配置后访问显示 403 Forbidden
sudo chown -R www-data:www-data /var/www/site1.example.com/html
2、域名无法访问,但 IP 可访问
3、Nginx/Apache 启动失败
六、总结
- 虚拟主机通过域名区分请求,实现 “一台服务器跑多个网站”;
- 严格遵循配置文件格式,避免语法错误;
- 重视权限管理和日志排查,这是解决问题的关键;
- 务必配置 HTTPS,提升网站安全性和可信度。