要在服务器上制作多个虚拟主机,核心是通过Web服务器(如Nginx或Apache)的配置文件定义多个站点目录和域名绑定,实现一台服务器运行多个独立网站。无论你租用云服务器还是自建机房,虚拟主机技术都能让你用一台设备同时托管多个项目,既节省成本又提高资源利用率,下面我会从零开始演示操作步骤,并对比两种主流服务器软件的配置差异。
服务器配置多个虚拟主机的具体步骤(以Nginx为例)
这部分以Nginx为蓝本,涵盖从环境准备到验证的全流程,如果你熟悉Apache,可以直接跳到对比章节。
准备工作:域名解析与服务状态确认
- 确保服务器已安装Nginx,未安装时,Debian系使用
sudo apt install nginx,Red Hat系使用yum install nginx。 - 将待绑定的域名(如 project1.com、project2.com)通过DNS解析到服务器公网IP,解析生效可能需要几分钟,推荐使用
dig命令确认。 - 检查防火墙是否放行80(HTTP)和443(HTTPS)端口,这是远程访问的前提。
创建独立站点目录与测试文件
为每个虚拟主机建立专属文档根目录,
sudo mkdir -p /var/www/project1
sudo mkdir -p /var/www/project2
在每个目录下创建index.html,写入不同内容以便后续验证,比如echo "Project1" > /var/www/project1/index.html。
编写Nginx虚拟主机配置文件
Nginx的虚拟主机配置通常放在/etc/nginx/sites-available/目录下,每个站点一个文件,以project1为例:
sudo nano /etc/nginx/sites-available/project1
将server_name和root替换为实际值:
server {
listen 80;
server_name project1.com www.project1.com;
root /var/www/project1;
index index.html index.htm;
}
同样的方法创建project2,只需修改server_name和root路径。Nginx虚拟主机配置的核心就是每个server块对应一个站点,互不干扰。
启用配置并重载服务
执行软链接将配置文件激活:
sudo ln -s /etc/nginx/sites-available/project1 /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/project2 /etc/nginx/sites-enabled/
测试语法正确性:
sudo nginx -t
输出test is successful后,重载服务:
sudo systemctl reload nginx
验证多站点访问
在浏览器输入http://project1.com和http://project2.com,如果分别显示对应页面,配置就成功了,若未生效,优先检查DNS解析状态和Nginx错误日志(/var/log/nginx/error.log)。Linux服务器搭建多个网站时,这一步是试金石,确保每个域名都指向正确的目录。
Apache虚拟主机配置方法对比
虽然Nginx逐渐成为主流,但Apache依然拥有大量用户,尤其在需要兼容旧系统或特定模块时。Apache虚拟主机配置的语法与Nginx不同,但逻辑相似。
基于名称的虚拟主机配置
Apache的配置文件通常位于/etc/apache2/sites-available/,默认有一个000-default.conf,建议为每个站点创建独立文件,例如project1.conf:
<VirtualHost :80>
ServerName project1.com
ServerAlias www.project1.com
DocumentRoot /var/www/project1
</VirtualHost>
然后启用站点并重载:
sudo a2ensite project1.conf
sudo systemctl reload apache2
基于IP的虚拟主机配置
当服务器拥有多个IP地址时,可以把替换为具体IP,实现不同IP对应不同站点,绝大多数场景使用基于名称的虚拟主机就足够了,因为单个IP可以绑定无限域名,业内专家指出,基于名称的虚拟主机是现代Web托管的主流选择,配置简单且易于管理。
Nginx与Apache虚拟主机配置对比
对于同时接触过两种服务器的人,Nginx和Apache虚拟主机对比能帮你快速迁移思路,下表总结了关键差异:
| 对比项 | Nginx | Apache |
|---|---|---|
| 配置文件位置 | /etc/nginx/sites-available/ |
/etc/apache2/sites-available/ |
| 配置指令格式 | server { listen 80; server_name ...; } |
<VirtualHost :80> ServerName ... </VirtualHost> |
| 启用方式 | 创建软链接到sites-enabled |
使用a2ensite命令(或手动启用) |
| 性能表现 | 高并发下内存占用更低,静态文件处理出色 | 模块丰富,支持.htaccess动态配置 |
| 资源隔离 | 默认无隔离,需借助php-fpm池或容器 |
通过mpm_itk模块实现用户隔离(需额外配置) |
从表格可以看出,Nginx的配置更简洁,适合追求性能的场景;Apache的生态更成熟,适合需要快速部署动态应用的环境。国内服务器虚拟主机价格差异主要体现在配置和使用上,但两者都能免费使用,节省授权费用。
虚拟主机配置常见问题与解答
虚拟主机配置后无法访问,可能原因是什么?
最常见的原因是DNS解析未完成或配置文件中的server_name与实际域名不匹配,你可以用curl -H "Host: project1.com" http://localhost绕过DNS测试,如果返回正确内容,问题就在解析端,检查防火墙状态和Web服务器错误日志,绝大多数问题都能在这些地方找到线索。
一台服务器最多能配置多少个虚拟主机?
理论上没有硬性限制,主要受服务器资源(内存、CPU、磁盘I/O)和文件描述符上限制约,普通云服务器轻松支持几十个低流量站点,但虚拟主机绑定多个域名时,建议每个站点独立规划目录和日志,避免互相影响,如果站点数量过大,考虑使用负载均衡或容器化技术分散压力,否则单机资源可能成为瓶颈。
虚拟主机配置中如何保证资源隔离?
虚拟主机只实现逻辑隔离,不是完全隔离,如果某个站点被攻击或消耗过多资源,可能影响其他站点,推荐使用php-fpm的池隔离(为每个站点配置独立的用户和进程),或者借助Docker容器实现更强的隔离。虚拟主机配置常见问题中,资源耗尽是最容易被忽视的,建议给每个站点设置配额,比如磁盘空间限制和带宽限制,防止一个站点拖垮全机。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/516421.html



