当前位置:首页 > 行业动态 > 正文

httpd域名别名设置

在Apache配置文件中,通过VirtualHost指令设置ServerAlias参数添加域名别名,保存后重启httpd服务使配置生效

Apache(httpd)域名别名设置指南

核心概念

域名别名(如 www.example.com 指向 example.com)或多域名共享同一站点时,需通过 Apache 配置实现,常见场景包括:

  • 主域名与带 www 前缀的域名指向同一站点
  • 多个二级域名共享同一站点内容
  • 完全独立的域名共用服务器资源

配置方法对比

方式 适用场景 特点
ServerAlias 同一站点的多域名/别名 简单配置,共享文档根目录
VirtualHost 不同域名需要独立配置 灵活控制,支持不同文档根/日志/配置

使用 ServerAlias 配置步骤

  1. 确认模块加载
    确保 mod_vhost 已启用(默认开启):

    a2enmod vhost  # Debian/Ubuntu
  2. 编辑主配置文件
    打开 httpd.conf 或对应虚拟主机配置文件:

    <VirtualHost :80>
        ServerAdmin webmaster@example.com
        DocumentRoot /var/www/html
        ServerName example.com
        # 添加别名(可多个)
        ServerAlias www.example.com blog.example.com
        # 其他配置...
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
    </VirtualHost>
  3. 重启服务

    systemctl restart httpd  # 或 apache2

使用多 VirtualHost 配置

当不同域名需要独立配置时(如不同文档根),需为每个域名定义单独的 <VirtualHost> 块:

<VirtualHost :80>
    ServerName example.com
    DocumentRoot /var/www/example
    # 其他配置...
</VirtualHost>
<VirtualHost :80>
    ServerName www.example.com
    DocumentRoot /var/www/example
    # 可覆盖特定配置,如重定向规则
    Redirect permanent / https://example.com/
</VirtualHost>

HTTPS 配置注意事项

若启用 SSL,需为每个域名配置证书。推荐使用通配符证书(如 .example.com)简化多域名管理:

<VirtualHost :443>
    ServerName example.com
    ServerAlias www.example.com
    SSLEngine on
    SSLCertificateFile /path/to/cert.pem
    SSLCertificateKeyFile /path/to/key.pem
    # 其他配置...
</VirtualHost>

常见问题排查

问题 解决方案
配置生效但访问异常 检查 ServerNameServerAlias 是否拼写正确,DNS 解析是否正常
出现 “重复的虚拟主机” 错误 确保同一 IP+端口组合下 ServerName 唯一,或合并相同配置的 VirtualHost
SSL 证书报错 确认证书文件路径正确,或使用 SSLCertificateChainFile 配置中间证书链

相关问题与解答

问题1:如何让多个子域名共享同一站点但保留独立日志?

解答
为每个子域名创建独立的 <VirtualHost>,指定相同 DocumentRoot 但不同日志文件:

<VirtualHost :80>
    ServerName sub1.example.com
    DocumentRoot /var/www/main
    CustomLog /var/log/apache2/sub1_access.log combined
    ErrorLog /var/log/apache2/sub1_error.log
</VirtualHost>
<VirtualHost :80>
    ServerName sub2.example.com
    DocumentRoot /var/www/main
    CustomLog /var/log/apache2/sub2_access.log combined
    ErrorLog /var/log/apache2/sub2_error.log
</VirtualHost>

问题2:如何强制所有别名跳转到主域名?

解答
在次要域名的 <VirtualHost> 中添加重定向规则:

<VirtualHost :80>
    ServerName www.example.com
    Redirect permanent / https://example.com/
</VirtualHost>

或使用 mod_rewrite

<VirtualHost :80>
    ServerName www.example.com
    DocumentRoot /var/www/html
    <Directory "/var/www/html">
        RewriteEngine On
        RewriteCond %{HTTP_HOST} !^example.com$ [NC]
        RewriteRule ^(.)$ https://example.com/$1 [L,R=301]
    </Directory>
</VirtualHost>
0