使用Apache虚拟主机和mod_proxy我想访问端口8080上的jetty实例中可用的java应用程序(myapp)。
在我的apache虚拟主机配置上使用ProxyPass / localhost:8080/
我可以使用www.mydomain.com/myapp访问在jetty中运行的应用程序,但我希望从www.mydomain.com访问该应用程序。
尝试ProxyPass / localhost:8080/myapp
无法找到该应用程序,因为该请求变为www.mydomain.com/myappmyapp /.
然后尝试:
<Location />
ProxyPass localhost:8080/myapp/
SetEnv force-proxy-request-1.0 1
SetEnv proxy-nokeepalive 1
</Location>
我可以访问该应用程序,但仅用于第一个请求。后续请求将成为www.mydomain.com/myappmyapp/
经过多次阅读wiki.eclipse.org/Jetty/Tutorial/Apache和apache mod_proxy docs后,我设法从www.mydomain.com正确使用该应用程序的唯一方法是使用以下配置:
<Location /myapp/>
ProxyPass localhost:8080/myapp/
SetEnv force-proxy-request-1.0 1
SetEnv proxy-nokeepalive 1
</Location>
<Location />
ProxyPass localhost:8080/myapp/
SetEnv force-proxy-request-1.0 1
SetEnv proxy-nokeepalive 1
</Location>
所以在这两种情况下都会将请求转发给jetty应用程序。
我对apache和jetty很陌生,我很确定有更好,更优雅的方法来实现相同的结果。 实际上apache抱怨说:
[warn] worker localhost:8080/myapp/ already used by another worker
答案 0 :(得分:1)
问题是当您使用上下文路径/ myapp在jetty中部署应用程序时,它将相应地生成所有链接。 Apache mod_proxy在HTTP级别(头部)执行所有重写,并且不会对响应主体执行任何操作,保持原样。
如果你不介意/ myapp粘在一起,你可以打开mod_rewrite并在你的位置块中包含以下两行:
RewriteEngine on
RewriteRule ^/myapp/(.*)$ /$1 [P]
如果您想完全摆脱/ myapp,那么剩下的唯一选择(假设您不想浪费mod_proxy_html的CPU功能)是配置虚拟主机,并在具有上下文路径的虚拟主机上部署应用程序/。
答案 1 :(得分:0)
如果您希望可以在站点的根目录访问您的Web应用程序,那么您需要将Web应用程序部署到容器的根目录中。通常,这是通过调用 war 文件ROOT.war
而不是myapp.war
来完成的(尽管这最终取决于Jetty部署者的配置,这可能比默认部署更复杂) )。
答案 2 :(得分:0)
是的,它适用于jetty root,但我想运行多个应用程序。 myapp的配置位于jetty的contexts文件夹下:
<Configure class="org.mortbay.jetty.webapp.WebAppContext">
<Set name="contextPath">/mvc-showcase</Set>
<Set name="war"><SystemProperty name="jetty.home"/>/webapps/mvc-showcase.war</Set>
</Configure>
我的码头版本是6.1.22