上一篇
httpd域名别名设置
- 行业动态
- 2025-04-30
- 1
在Apache配置文件中,通过VirtualHost指令设置ServerAlias参数添加域名别名,保存后重启httpd服务使配置生效
Apache(httpd)域名别名设置指南
核心概念
域名别名(如 www.example.com
指向 example.com
)或多域名共享同一站点时,需通过 Apache 配置实现,常见场景包括:
- 主域名与带
www
前缀的域名指向同一站点 - 多个二级域名共享同一站点内容
- 完全独立的域名共用服务器资源
配置方法对比
方式 | 适用场景 | 特点 |
---|---|---|
ServerAlias | 同一站点的多域名/别名 | 简单配置,共享文档根目录 |
VirtualHost | 不同域名需要独立配置 | 灵活控制,支持不同文档根/日志/配置 |
使用 ServerAlias
配置步骤
确认模块加载
确保mod_vhost
已启用(默认开启):a2enmod vhost # Debian/Ubuntu
编辑主配置文件
打开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>
重启服务
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>
常见问题排查
问题 | 解决方案 |
---|---|
配置生效但访问异常 | 检查 ServerName 和 ServerAlias 是否拼写正确,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>