Apache反向代理配置无效访问显示默认页面问题咨询
问题排查与修正方案
存在的配置错误/遗漏项
- 反向代理配置的虚拟主机标签拼写错误
你写的<VitualHost *:80>拼写错误,缺少字母r,正确应为<VirtualHost *:80>,结束标签<virtualHost>大小写不匹配,Apache对配置标签大小写敏感,错误的标签会导致该段配置完全不生效。 - 80端口反向代理虚拟主机未配置域名匹配规则
你没有给80端口的虚拟主机配置ServerName/ServerAlias指定要匹配的域名,导致所有80端口的请求都没有命中你写的这段代理配置,直接匹配到了Apache默认的虚拟主机,所以只会显示默认站点页面,日志也只会打到other_vhosts_access.log中。 - ProxyPass规则语法错误
ProxyPass指令的第一个参数是请求的URI路径前缀,不是请求域名,你直接将域名写在第一个参数位的写法不符合语法要求,规则完全不会触发。 - 未保留原始请求的Host头
代理请求发往后端11010端口的Apache实例时,默认会将Host头替换为127.0.0.1:11010,后端实例无法通过Host头匹配到对应的项目虚拟主机,就算代理规则生效也会返回后端的默认站点。 - 缺失必要模块启用(潜在问题)
反向代理需要依赖mod_proxy、mod_proxy_http两个Apache模块,若未启用会导致代理规则不生效。
正确配置示例
第一步:启用必要模块(以Debian/Ubuntu为例)
a2enmod proxy proxy_http systemctl restart apache2
如果是CentOS/RHEL系列,需要在Apache配置文件中添加对应模块加载语句。
第二步:修正反向代理配置
推荐按域名拆分虚拟主机,配置更清晰不易出错:
# 处理project1.john.test的代理 <VirtualHost *:80> ServerName project1.john.test ProxyPreserveHost On ProxyPass / http://127.0.0.1:11010/ ProxyPassReverse / http://127.0.0.1:11010/ </VirtualHost> # 处理project2.john.test的代理 <VirtualHost *:80> ServerName project2.john.test ProxyPreserveHost On ProxyPass / http://127.0.0.1:11010/ ProxyPassReverse / http://127.0.0.1:11010/ </VirtualHost>
配置修改完成后执行apache2ctl configtest验证语法无错误,再重载Apache服务即可生效。
内容的提问来源于stack exchange,提问作者ScrawnyYawny
相关产品推荐
相关产品推荐

