在我用来演示系统的单个服务器上,我有一个运行在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虚拟主机中定义。
ProxyPass "/webui" "https://example.com:4444/webui/"
ProxyPassReverse "/my_demo" "https://example.com:4444/"而tomcat应用程序在server.xml中有一个代理条目。
<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和重写日志,但是除了上面提到的问题之外,看不到错误发生在哪里。
我还需要检查其他元素吗?
如有任何建议,将不胜感激。
发布于 2020-01-13 07:44:51
您的问题归结为重写来自应用服务器的绝对请求URI。这可以分为两方面:
我建议第二种方法,因为这是最简单的方法。你应该:
/my_demo而不是/webui上部署web应用程序。这可能就像将webapps/webui重命名为CATALINA_BASE中的webapps/my_demo一样简单。/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过度使用,只需配置一个secure和scheme属性更改的HTTP连接器,这样Tomcat就知道它是通过HTTPS进行代理的:
<Connector port="4444"
scheme="https" secure="true"
proxyName="example.com"
proxyPort="443"/>并在https指令中将ProxyPass更改为http。
https://serverfault.com/questions/998655
复制相似问题