我们有以下场景:
- 第一个应用程序:
http://example.com:8090/access/app1
- 第二个APP:
http://example.com:8090/access/app2
我们要配置 apache mod_proxy 来分配:
http://app1.example.com
>>http://example.com:8090/access/app1
http://app2.example.com
>>http://example.com:8090/access/app2
我们尝试了以下操作,但没有成功:
<VirtualHost app1.example.com:80>
ServerName app1.example.com
ProxyPass / http://example.com:8090/access/app1/
ProxyPassReverse / http://example.com:8090/access/app1/
</VirtualHost>
<VirtualHost app2.example.com:80>
ServerName app2.example.com
ProxyPass / http://example.com:8090/access/app2/
ProxyPassReverse / http://example.com:8090/access/app2/
</VirtualHost>
将其保存到/etc/httpd/conf.d/myconfig.conf
,然后重新启动 apache sudo service http restart
。
使用浏览器并写入时,http://app1.example.com
会出现默认的 Apache-Welcome-Page,但不会出现我们的 app1 页面。看来 mod_proxy 配置不起作用。
将错误级别设置为 DEBUG 将显示以下事件error_log
:
[2018 年 8 月 7 日星期二 14:18:04.748775] [autoindex:error] [pid 1985] [客户端 xxxx:58843] AH01276:无法提供目录 /var/www/html/:未找到匹配的 DirectoryIndex (index.html),并且 Options 指令禁止服务器生成的目录索引
任何帮助将不胜感激
答案1
按如下方式配置虚拟主机文件
<VirtualHost *:80>
ServerName app1.example.com
ProxyPass /app1 http://example.com:8090/access/app1/
ProxyPassReverse /app1 http://example.com:8090/access/app1/
</VirtualHost>
<VirtualHost *:80>
ServerName app2.example.com
ProxyPass /app2 http://example.com:8090/access/app2/
ProxyPassReverse /app2 http://example.com:8090/access/app2/
</VirtualHost>
答案2
两件事情:
1)注释掉或清空conf.d/welcome.conf文件(但不要删除它,否则下次修补httpd时它将被恢复
2) httpd -S 是考虑虚拟服务器问题时的好帮手。这将输出您的配置中虚拟主机的定义位置(以及哪些是默认的)
另外还有一个好处:我看到你正在使用端口 8090,这让我觉得你可能正在处理 Atlassian 产品。如果你正在使用带有 Synchrony 协作编辑组件的 Confluence,我或许可以为你提供一些 websocket 的配置(Atlassian 的文档在反向代理配置方面令人困惑)