Debian 主机上多 Web 主机的配置方法

zhangzhijun 15次浏览 0个评论
在实际开发和运维中,我们经常需要在一台服务器上运行多个网站 —— 可能是个人博客、企业官网、测试项目等。通过合理配置多 Web 主机,不仅能节省硬件资源,还能简化管理流程。本文将以 Debian 系统为基础,详细介绍如何通过 Nginx 和 Apache 两种主流 Web 服务器实现多主机配置,涵盖从环境准备到 HTTPS 部署的完整流程。

一、多 Web 主机的核心原理

多 Web 主机(虚拟主机)的核心逻辑是通过 “域名区分” 或 “端口区分”,让一台服务器对不同请求返回对应网站内容。在生产环境中,“域名区分” 是最常用的方式:当用户通过不同域名访问服务器时,Web 服务器会根据请求头中的Host字段,匹配到对应的网站目录并返回内容。
Debian 作为稳定性极强的 Linux 发行版,对 Nginx、Apache 等 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 主机配置

Nginx 以轻量、高性能著称,是当前多主机配置的首选方案之一。

步骤 1:安装 Nginx

通过 APT 安装并启动 Nginx:
# 安装Nginx
sudo apt install -y nginx
# 启动服务并设置开机自启
sudo systemctl start nginx
sudo systemctl enable nginx
验证 Nginx 是否正常运行:sudo systemctl status nginx,若显示active (running)则表示启动成功。

步骤 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 虚拟主机

Nginx 的虚拟主机配置文件需放在/etc/nginx/sites-available/目录,再通过软链接关联到/etc/nginx/sites-enabled/启用。

配置第一个虚拟主机(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
配置内容与 site1 类似,仅需修改server_name、root和日志路径:
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
若显示nginx: configuration file /etc/nginx/nginx.conf test is successful,则表示配置无误。

3、重启 Nginx:使配置生效:

sudo systemctl restart nginx

步骤 5:测试访问

此时通过浏览器访问http://site1.example.com和http://site2.example.com,应分别显示对应的测试页面。若无法访问,可通过以下方式排查:
  • 检查域名解析:ping site1.example.com是否指向服务器 IP。
  • 查看 Nginx 日志:tail -f /var/log/nginx/site1_error.log定位错误原因。
  • 检查防火墙:sudo ufw status确认 80 端口已开放。

三、基于 Apache 的多 Web 主机配置

Apache 作为老牌 Web 服务器,配置逻辑与 Nginx 略有不同,但核心思路一致。

步骤 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 虚拟主机

Apache 的虚拟主机配置文件同样放在/etc/apache2/sites-available/,但文件名通常以.conf结尾。

配置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:让网站更安全

现代网站建议强制使用 HTTPS,我们可以通过 Let's Encrypt 申请免费 SSL 证书,并配置到虚拟主机中。

步骤 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
根据提示完成操作后,Certbot 会自动修改虚拟主机配置,将 HTTP 请求重定向到 HTTPS,并配置证书路径。证书有效期为 90 天,Certbot 会自动续期。

五、常见问题与解决方案

1、配置后访问显示 403 Forbidden

通常是目录权限问题,确保网站目录对 Web 服务器用户(Nginx 为www-data,Apache 为www-data)有可读权限:
sudo chown -R www-data:www-data /var/www/site1.example.com/html

2、域名无法访问,但 IP 可访问

检查server_name配置是否与域名一致,或 DNS 解析是否生效(可通过nslookup site1.example.com验证)。

3、Nginx/Apache 启动失败

查看错误日志(Nginx:/var/log/nginx/error.log;Apache:/var/log/apache2/error.log),通常是配置文件语法错误(如缺少分号、括号不匹配)。

六、总结

通过本文的步骤,你已掌握在 Debian 上通过 Nginx 或 Apache 配置多 Web 主机的方法,包括基础虚拟主机设置、HTTPS 部署及问题排查。核心要点:
  • 虚拟主机通过域名区分请求,实现 “一台服务器跑多个网站”;
  • 严格遵循配置文件格式,避免语法错误;
  • 重视权限管理和日志排查,这是解决问题的关键;
  • 务必配置 HTTPS,提升网站安全性和可信度。
后续可根据实际需求扩展配置,例如添加 PHP 解析(需安装 php-fpm 并在虚拟主机中配置)、数据库联动等。定期备份虚拟主机配置文件(如/etc/nginx/sites-available/或/etc/apache2/sites-available/),可避免意外操作导致的配置丢失。
 

版权申明:

本博客所有文章除特别声明外均采用 BY-NC-SA 4.0 许可协议。依据 BY-NC-SA 4.0 许可协议,转载请附上原文出处链接及本声明。

原文链接: https://zhangzhijun.life/debian-zhujishangduo-web-zhujidepeizhifangfa.html

Default Avatar

评论

此字段内容将保密,不会被其他人看见。