通过apache mod_代理的jetty

通过apache mod_代理的jetty,apache,proxy,jetty,location,proxypass,Apache,Proxy,Jetty,Location,Proxypass,使用Apache virtualhost和mod_代理,我想访问端口8080上jetty实例中可用的java应用程序(myapp) 使用apache virtualhost配置上的ProxyPass/localhost:8080/,我可以通过www.mydomain.com/myapp访问jetty中运行的应用程序,但我希望从www.mydomain.com访问该应用程序 尝试使用ProxyPass/localhost:8080/myapp找不到应用程序,因为请求变为www.mydomain.c

使用Apache virtualhost和mod_代理,我想访问端口8080上jetty实例中可用的java应用程序(myapp)

使用apache virtualhost配置上的
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>

如果您希望您的webapp可以在站点的根目录下访问,那么您需要将web应用程序部署到容器的根目录中。通常,这是通过调用war文件
ROOT.war
而不是
myapp.war
(尽管这最终取决于Jetty deployer的配置,它可能比默认配置更复杂)。

是的,它可以从Jetty根目录运行,但我希望有多个应用程序运行。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>

/mvc展示
/webapps/mvc-showcase.war

我的jetty版本是6.1.22

问题是,当您使用上下文路径/myapp在jetty中部署应用程序时,它将相应地生成所有链接。Apache mod_proxy在HTTP级别(头)执行所有重写,不会对响应体执行任何操作,保持原样

如果您不介意/myapp停留,可以打开mod_rewrite并在位置块中包含以下两行:

RewriteEngine on
RewriteRule ^/myapp/(.*)$ /$1 [P]

如果您想永远摆脱/myapp,那么剩下的唯一选项(假设您不想在mod_proxy_html上浪费CPU资源)是配置虚拟主机,并在上下文路径为/的虚拟主机上部署应用程序

我必须删除所有http://before localhost等,否则它们会被检测为超链接,并且在postYes上不允许。它可以从jetty根目录运行,但我希望有多个应用程序运行。jetty中的路径必须与Apache Httpd中的路径匹配。
<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>
RewriteEngine on
RewriteRule ^/myapp/(.*)$ /$1 [P]