最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Linux Apache 虚拟主机 VirtualHost 配置完整实战
时间:2026-07-07 10:47:56 编辑:袖梨 来源:一聚教程网
Apache虚拟主机配置需完成加载、授权、路由、验证四步闭环:必须显式包含配置文件、设置DocumentRoot全路径执行权限与Require all granted、通过ServerName/ServerAlias正确路由、HTTP与HTTPS需分端口独立配置并启用mod_ssl。
Apache 虚拟主机配置不是写完 <VirtualHost> 就能跑起来,漏掉任一环节都可能返回 404、403 或始终访问默认站点。关键在“加载、授权、路由、验证”四步闭环。
确保虚拟主机配置被 Apache 实际加载
Apache 不会自动读取 httpd-vhosts.conf 或 sites-available 下的文件,必须显式包含。
- CentOS/RHEL:打开
/etc/httpd/conf/httpd.conf,确认这行已取消注释:Include conf/extra/httpd-vhosts.conf - Ubuntu/Debian:推荐用
a2ensite启用站点,例如:sudo a2ensite site-a.local.conf,再sudo systemctl reload apache2 - 验证是否生效:运行
sudo httpd -M | grep vhost(CentOS)或sudo apache2ctl -M | grep vhost(Ubuntu),看到vhost_alias_module表示模块已启用;再执行sudo httpd -t或sudo apache2ctl -t确保语法无误
DocumentRoot 目录权限与 Apache 访问控制必须匹配
403 Forbidden 错误中,90% 源于路径权限或缺失 Require 指令。
- Linux 下 Apache 进程用户通常是
www-data(Ubuntu)或apache(CentOS),需对 整个路径链 具备执行(x)权限:
比如DocumentRoot /var/www/site-a.local/public_html,则/var、/var/www、/var/www/site-a.local、/var/www/site-a.local/public_html每一级都得有x权限 - 在
<VirtualHost>内必须定义<Directory>块,并写明访问策略(Apache 2.4+):<Directory "/var/www/site-a.local/public_html"><br> Require all granted<br> AllowOverride None<br></Directory>
- 避免用
chmod 777,更安全的做法是:sudo chown -R $USER:www-data /var/www/site-a.localsudo chmod -R 750 /var/www/site-a.local
基于域名的 VirtualHost 必须靠 ServerName 正确路由
Apache 依据请求头中的 Host 字段顺序匹配 ServerName 和 ServerAlias,第一个完全匹配者胜出。
-
ServerName必须是完整域名(如site-a.local),不能带协议、端口或路径 -
ServerAlias可设多个别名,支持通配符:ServerAlias www.site-a.local *.site-a.local(但*.local不合法) - 多个站点共用一个 IP 和端口时,所有
<VirtualHost *:80>的ServerName必须互不重复;否则后定义的将永远不会被命中 - 开发测试阶段,可临时修改本地
/etc/hosts文件模拟 DNS:127.0.0.1 site-a.local<br>127.0.0.1 site-b.local
HTTP 与 HTTPS 必须分开定义独立 VirtualHost
HTTP 和 HTTPS 不能混在一个 <VirtualHost> 块里,HTTPS 需监听 443 端口并指定证书路径。
- 先确保已启用
mod_ssl:
Ubuntu:sudo a2enmod ssl;CentOS:sudo yum install mod_ssl - 添加 HTTPS 配置块(与 HTTP 块并列):
<VirtualHost *:443><br> ServerName site-a.local<br> DocumentRoot "/var/www/site-a.local/public_html"<br> SSLEngine on<br> SSLCertificateFile /path/to/cert.pem<br> SSLCertificateKeyFile /path/to/privkey.pem<br> <Directory "/var/www/site-a.local/public_html"><br> Require all granted<br> </Directory><br></VirtualHost>
- 检查端口监听状态:
sudo ss -tlnp | grep ':443',确认 Apache 进程确实在监听
相关文章
- 疯狂水世界最强阵容表 疯狂水世界最强阵容搭配攻略 07-07
- 千古江湖梦最强阵容 最强阵容搭配推荐 07-07
- 《集合啦动物森友会》树木多久才会生长 07-07
- 热血航线布满碎石的灰白海岸在哪 07-07
- 摩尔庄园雪绒草位置介绍 07-07
- 保卫萝卜4夏日垂钓第19关攻略 07-07