apache - Apache ProxyPass 不适用于自定义应用程序
问题描述
我有以下情况:我需要调用以下网址http://myapp.mydomain.com
并且网址应回复如下
http://myapp.mydomain.com/index.jsp
在我的 apache 2.4 上,我尝试了不同的设置,但似乎没有一个工作,
第一次尝试
<VirtualHost *:80>
ProxyPreserveHost On
ProxyPass /myapp http://127.0.0.1:8080/myapp
ProxyPassReverse /myapp http://127.0.0.1:8080/myapp
</VirtualHost>
第二次尝试
<VirtualHost *:80>
ProxyPreserveHost On
ProxyPass /myapp/ http://127.0.0.1:8080/myapp/
ProxyPassReverse /myapp/ http://127.0.0.1:8080/myapp/
</VirtualHost>
第三次尝试
<Location "/myapp/">
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:8080/myapp/
ProxyPassReverse / http://127.0.0.1:8080/myapp/
</Location>
第四次尝试
<Location "/myapp/">
ProxyPreserveHost On
ProxyPass /myapp/ http://127.0.0.1:8080/myapp/
ProxyPassReverse /myapp/ http://127.0.0.1:8080/myapp/
似乎所有配置都不起作用,urlhttps://myapp.mydomain.com
显示了tomcat 的欢迎页面。我对 apache 应用的任何配置,使其工作的唯一方法是在链接上手动添加代理的挂载点,如下所示
http://myapp:mydomain.com/myapp/index.jsp
关于如何使这项工作的任何建议?提前致谢。
解决方案
我没有足够的信誉发表评论并要求澄清,因此我将根据您的反馈编辑我的答案。
使用 VirtualHost 时,我认为这是您的最佳选择,您还需要ServerName
包含一个指令。(也许您出于某种原因故意在这里省略了它,但我在下面的示例中展示了它)。
另外,我相信您的路由参数需要用引号括起来ProxyPass
,这与VirtualHost 中的许多其他项目不同。请特别注意目标后面的斜杠(第二个参数)。由于您所需的 URL 将位于子域的根路径中,因此请确保您指明了(作为第一个参数,)。这应该会导致 URL指向您想要的。(在您的示例 2 中,您创建了第一个参数,因此,您必须将其添加到您的 URL 才能访问它,正如您所指出的 - 减去您将冒号换成点的位置。)ProxyPassReverse
myapp
index
myapp.mydomain.com
/
https://myapp.mydomain.com
http://127.0.0.1:8080/myapp/
/myapp/
(免责声明:我对 Tomcat 了解不多,但我的假设是 index.jsp 应该像大多数其他“索引”文件一样被对待,因为如果它们存在并且可以,那么它们将被查找和使用,因此,从客户端请求的 URL 中省略)。
我还添加了ProxyRequests
以下内容,因为我不知道默认值是否为“关闭”,但除非您使用正向代理(而不是您想要的明显反向)我认为这至少是一个潜在的安全问题不是这样做。
减去您未在此处显示的任何其他指令,似乎这应该可以解决问题:
<VirtualHost *:80>
ServerName myapp.mydomain.com
ProxyRequests off
ProxyPreserveHost On
ProxyPass "/" "http://127.0.0.1:8080/myapp/"
ProxyPassReverse "/" "http://127.0.0.1:8080/myapp/"
</VirtualHost>
原始回复来自手机;我已经清理了它并从桌面添加了一个示例和更清晰的解释。
推荐阅读
- java - createAgent() Jade 中的非法访问异常
- javascript - 嵌套字典到字符串列表 - typeScript
- c# - 具有多个字段的 UpdateDefinition 不起作用
- javascript - 是否可以获得当前显示的 .gif 帧?
- javascript - 使用 JavaScript 加载屏幕不会改变手机
- rascal - 向生成的 CST 节点添加换行符
- machine-learning - 在 openml 上运行代表什么?
- rust - 如何从 Vec 转换
不通过字符串到 Rust 中的 u32? - python - 如何在 Keras 的功能 API 中构建以嵌套模型层结束的子模型
- c# - 使用 EF Core 2.2 使用 SQL Server DECRYPTBYKEY 解密字符串