【问题标题】:jetty via apache mod_proxy码头通过 apache mod_proxy
【发布时间】:2011-04-04 00:15:56
【问题描述】:

使用 Apache 虚拟主机和 mod_proxy 我想访问端口 8080 上的码头实例中可用的 java 应用程序 (myapp)。

在我的 apache 虚拟主机配置中使用 ProxyPass / localhost:8080/,我可以使用 www.mydomain.com/myapp 访问在码头中运行的应用程序,但我希望从 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 文档后,我设法从 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>

所以在这两种情况下,请求都会被转发到码头应用程序。

我对 apache 和 jetty 还很陌生,我很确定有更好、更优雅的方法可以达到同样的效果。 事实上 apache 抱怨说:

[warn] worker localhost:8080/myapp/ already used by another worker

【问题讨论】:

  • 我必须删除 localhost 之前的所有 http:// 等等,否则它们会被检测为超链接,并且不允许在帖子中使用

标签: apache proxy jetty location proxypass


【解决方案1】:

问题在于,当您使用上下文路径 /myapp 在码头中部署应用程序时,它将相应地生成所有链接。 Apache mod_proxy 在 HTTP 级别(标头)进行所有重写,不会对响应正文做任何事情,保持原样。

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 是的,它可以从码头根目录运行,但我希望运行多个应用程序。
      • Jetty 中的路径必须与 Apache Httpd 中的路径一致。
      猜你喜欢
      • 2012-10-05
      • 1970-01-01
      • 2018-05-30
      • 1970-01-01
      • 1970-01-01
      • 2016-02-11
      • 2010-11-08
      • 2013-10-03
      • 1970-01-01
      相关资源
      最近更新 更多