当前位置:首页 > 虚拟主机 > 正文

建立第二个虚拟主机

新建虚拟主机需复制主配置模板,修改监听端口及根目录路径,重启服务生效,实现多站点

前期准备

环境确认

项目 要求 说明
操作系统 Linux(推荐CentOS/Ubuntu) Windows需额外安装工具链
Web服务器 Apache HTTP Server 默认支持基于名称的虚拟主机
域名解析 已绑定至服务器公网IP 需提前完成A记录配置
根目录结构 /var/www/html为主站目录 新站点建议新建独立目录

必要权限

  • 使用sudo或切换至root用户执行系统级操作
  • 确保目标目录可被Web服务器进程读写(如apache/www-data用户)

核心配置步骤(以Apache为例)

编辑主配置文件

路径:/etc/httpd/conf/httpd.conf(CentOS)
/etc/apache2/apache2.conf(Ubuntu)

建立第二个虚拟主机  第1张

关键修改点:

# 启用名称型虚拟主机
NameVirtualHost :80
# 保留默认主机定义(防止未匹配请求失败)
<VirtualHost :80>
    DocumentRoot "/var/www/html"
    ServerName www.example.com
    ErrorLog logs/default-error_log
    CustomLog logs/default-access_log common
</VirtualHost>
# 新增第二个虚拟主机配置
<VirtualHost :80>
    DocumentRoot "/var/www/secondsite"   # 新站点根目录
    ServerName second.example.com        # 对应域名
    ErrorLog logs/second-error_log       # 独立错误日志
    CustomLog logs/second-access_log common # 独立访问日志
</VirtualHost>

创建站点目录及测试页

# 创建目录并设置权限
mkdir -p /var/www/secondsite
chown -R apache:apache /var/www/secondsite  # CentOS
# chown -R www-data:www-data /var/www/secondsite  # Ubuntu
# 生成测试页面
echo "<h1>Second Virtual Host Working!</h1>" > /var/www/secondsite/index.html

更新hosts文件(本地测试用)

编辑 /etc/hosts 添加:

168.1.100 second.example.com  # 替换为实际服务器IP

重启服务使配置生效

systemctl restart httpd      # CentOS
# systemctl restart apache2   # Ubuntu

高级配置选项

功能 实现方式 示例代码片段
SSL加密 启用mod_ssl模块 + 443端口监听 <VirtualHost :443>
负载均衡 结合mod_proxy实现后端分发 ProxyPass balancer://backends/
PHP版本隔离 FPM池化管理 SetHandler "proxy:unix:/run/php/php8.0-fpm.sock|fcgi://localhost"
访问控制 .htaccess文件+AllowOverride指令 <Directory "/var/www/secondsite"> AllowOverride All </Directory>

常见问题与解答

Q1: 为什么输入新域名仍跳转到主站?

原因分析:

  • DNS未正确解析到服务器IP → 检查域名服务商的A记录
  • 防火墙阻断了80/443端口 → 执行firewall-cmd --permanent --add-service=http后重载防火墙
  • 配置文件顺序错误 → 确保新虚拟主机定义在主站之后

解决方案:

# 检查端口开放状态
ss -tuln | grep :80
# 检查SELinux状态(CentOS特有)
getsebool httpd_can_network_connect → 如果为off则执行 setsebool -P httpd_can_network_connect on

Q2: 如何实现同一台服务器上的多级子域名?

典型场景: blog.example.com → forum.example.com → shop.example.com
实施要点:

  1. 为每个子域名创建独立虚拟主机块:
    <VirtualHost :80>
     ServerName blog.example.com
     DocumentRoot /var/www/blog
    </VirtualHost>
    <VirtualHost :80>
     ServerName forum.example.com
     DocumentRoot /var/www/forum
    </VirtualHost>
  2. 使用通配符匹配时需谨慎:ServerName www..example.com会导致优先级冲突
  3. 推荐采用扁平化目录结构而非嵌套式,便于维护和管理

验证清单

域名解析生效:dig A second.example.com +short应返回服务器IP
端口连通性:telnet server_ip 80能建立TCP连接
HTTP响应头:curl -I http://second.example.com显示200 OK状态码
日志输出:查看/var/log/httpd/second-access_log

0