首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不使用代理的Webapp

不使用代理的Webapp
EN

Server Fault用户
提问于 2020-01-12 22:29:30
回答 1查看 926关注 0票数 0

在我用来演示系统的单个服务器上,我有一个运行在apache2上的静态网站和一个运行在tomcat实例上的演示web应用程序。如果直接访问,两者都可以正常工作。我已经设置了一个代理来将web应用程序端口和混乱的URL转换为一些简单的东西,但是我得到了不一致的结果。

服务器是一个数字海洋Ubuntu18.04液滴与Apache2。我的主要网站是使用Drupal和有一个标准的网址https://example.com。这个web应用程序是一个大型企业系统,由Tomcat7提供服务,并在https://example.com:4444/webui/上访问。

目标是访问https://example.com/my_demo的网络应用程序。

代理以标准方式在apache2虚拟主机中定义。

代码语言:javascript
复制
ProxyPass "/webui" "https://example.com:4444/webui/"
ProxyPassReverse "/my_demo" "https://example.com:4444/"

而tomcat应用程序在server.xml中有一个代理条目。

代码语言:javascript
复制
<Connector protocol="org.apache.coyote.http11.Http11NioProtocol"
        port="4444" maxThreads="200"
        scheme="https" secure="true" SSLEnabled="true"
        keystoreFile="/opt/webapp/keystore/webappKeystore" keystorePass="redactedPassword"
        clientAuth="false" sslProtocol="TLS"
        proxyName="example.com"
        proxyPort="443"/>

这似乎行得通,但还不够好。

我遇到的问题是,这个web应用程序并没有一直在使用代理程序。它是用ZK编写的,具有使用应用程序上下文路径(例如“/webui/映像/theImage.jpg”)和其他使用ZK桌面上下文的资源引用的混合,这些引用最终可能发送"images/theimage.jpg“。因此,这个网络应用程序似乎在某些地方缺少按钮图像,但在另一些地方却没有。

此外,在注销时,webapp将浏览器重定向回tomcat地址,但是链接被破坏,最后作为/webui/index结束,出现403错误,而不是/webui/index.zul,就好像重写不正确一样。

同样,在没有经过代理的情况下从tomcat服务器运行时,web应用程序工作得很好。

我正在寻找关于如何调试这个和让tomcat应用程序在代理下工作的建议。我尝试过使用dump_io和重写日志,但是除了上面提到的问题之外,看不到错误发生在哪里。

我还需要检查其他元素吗?

如有任何建议,将不胜感激。

EN

回答 1

Server Fault用户

回答已采纳

发布于 2020-01-13 07:44:51

您的问题归结为重写来自应用服务器的绝对请求URI。这可以分为两方面:

  1. Apache2可以重写代理内容中的所有URI。很难捕获可以出现URI的所有位置。
  2. Tomcat7可以使用与Apache服务器相同的绝对请求URI。

我建议第二种方法,因为这是最简单的方法。你应该:

  1. /my_demo而不是/webui上部署web应用程序。这可能就像将webapps/webui重命名为CATALINA_BASE中的webapps/my_demo一样简单。
  2. 将Apache配置为代理/my_demo/https://example.com:4444/my_demo/:ProxyPass "/my_demo/“https://example.com:4444/my_演示/”ProxyPassReverse "/my_demo/“https://example.com:4444/my_演示/

PS:将HTTPS用于Tomcat是IMHO过度使用,只需配置一个securescheme属性更改的HTTP连接器,这样Tomcat就知道它是通过HTTPS进行代理的:

代码语言:javascript
复制
<Connector port="4444"
           scheme="https" secure="true"
           proxyName="example.com"
           proxyPort="443"/>

并在https指令中将ProxyPass更改为http

票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/998655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档