簡體   English   中英

jetty通過apache mod_proxy

[英]jetty via apache mod_proxy

使用Apache虛擬主機和mod_proxy我想訪問端口8080上的jetty實例中可用的java應用程序(myapp)。

使用ProxyPass / localhost:8080/在我的apache虛擬主機配置上,我可以使用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

問題是當您使用上下文路徑/ myapp在jetty中部署應用程序時,它將相應地生成所有鏈接。 Apache mod_proxy在HTTP級別(頭部)執行所有重寫,並且不會對響應主體執行任何操作,保持原樣。

如果您不介意/ myapp粘在一起,您可以打開mod_rewrite並在Location塊中包含以下兩行:

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

如果你想擺脫/ myapp,那么剩下的唯一選擇(假設你不想浪費mod_proxy_html的CPU能力)是配置虛擬主機,並在上下文路徑為/的虛擬主機上部署應用程序。

如果您希望在站點的根目錄中訪問您的Web應用程序,則需要將Web應用程序部署到容器的根目錄中。 通常,這是通過調用war文件ROOT.war而不是myapp.war (盡管這最終取決於Jetty部署程序的配置,這可能比默認情況更復雜)。

是的,它適用於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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM