簡體   English   中英

如何設置在Apache反向代理后面的子目錄上播放?

[英]How to setup Play on a sub-directory, behind an Apache reverse proxy?

我有一個Apache 2前端,它提供兩種請求:

  • 對根文件夾的請求(例如http://mysite.com/http://mysite.com/help )由apache本身(PHP / Wordpress)提供。
  • 對'/ playapp'子文件夾的特定請求將轉發到Play! 通過mod-proxy通過反向代理:

MOD-proxy.conf

ProxyPass        /playapp/ http://localhost:9000/
ProxyPassReverse /playapp/ http://localhost:9000/

最終結果是請求說http://mysite.com/playapp/Controller/actionhttp://localhost:9000/Controller/action到達Play服務器

現在,玩! 正確提供頁面,但所有鏈接,包括javascript,css和其他頁面的鏈接都被破壞。 例如,如果視圖使用:

#{stylesheet 'style.css' /}

然后渲染的結果是

<link rel="stylesheet" type="text/css" href="/public/stylesheets/style.css" charset="utf-8" ></link>

所以最終用戶試圖獲取http://mysite.com/public/stylesheets/style.css ,它返回404,因為它實際上不是Play的一部分! 應用程序。

在這里配置Apache + Play的正確方法是什么?

我正在尋找的結果是Play! 在最終呈現的HTML中返回諸如此類的URL(或者也許是為了相應地重寫URL): http://mysite.com/playapp/public/stylesheets/style.csshttp://mysite.com/playapp/public/stylesheets/style.css

此外,我確實需要一些能力鏈接Play應用程序之外。 例如,我希望將主路由(/)映射到我的絕對根( http://mysite.com/ ),而不是Play的根。

首先,重要的是:apache2不能(輕松)更改頁面中的鏈接。 所以Play必須提供正確的。

使用子域將使所有這些完全透明,但讓我們解決您的問題。

你的問題確實有兩點,

修復靜態資源的子文件夾

使用剛設置的路線

GET / playapp / public / staticDir:public

你在使用http.path嗎?

我認為反向應該考慮到它......

外部鏈接

  • 此外,我確實需要一些能力鏈接Play應用程序之外。 例如,我想將家鄉路線(/)映射到我的絕對根(http://mysite.com/),而不是Play的根。

這聽起來很簡單:如果它在播放應用程序之外,那么你沒有使用反向網址,所以只需將絕對路徑放在你的鏈接中......或者你正在使用反向? 如果是這樣,你能提供一個例子嗎?

你有沒有配置你的application.conf

XForwardedSupport=127.0.0.1

和你的apache.conf

ProxyPreserveHost on

如果不起作用的替代選項來自之前的帖子。

我相信我在這篇文章中給出的答案與你的情況有關

如何在Play Framework的配置文件中使用“war.context”?

基本上,它意味着從屬性文件中讀取一些值,並將該值預先掛起到所有路由。 它是servlet部署的建議方法,其中路徑從默認播放設置使用的路徑更改。

期望Apache重寫HTML,JS和CSS文件是愚蠢的。 JS中的SWF文件或動態構造的URL怎么樣? 無論如何,你得到我的漂移。 ProxyPassReverse文檔說明:

只會重寫上面特別提到的HTTP響應頭。 Apache不會重寫其他響應頭,也不會重寫HTML頁面中的URL引用。 這意味着如果代理內容包含絕對URL引用,則它們將繞過代理。 查看HTML並重寫URL引用的第三方模塊是Nick Kew的mod_proxy_html。

正如其中一條評論建議的那樣,更有可能成功的方法是配置另一個DNS名稱(例如play.ripper234.org)並創建一個配置,例如:

<VirtualHost>
ServerName play.ripper234.org
ProxyPass / http://localhost:9000/
ProxyPassReverse / http://localhost:9000/
</VirtualHost>

如果Play返回的文件,即使這樣也不會“保存”你! 將使用完全限定的URL,例如http:// localhost:9000 /http://www.yahoo.com/或諸如此類的URL。

至於推薦你一個不同的Web服務器,我實際上認為你應該堅持使用Apache。 它具有非常合理和強大的配置,並且它足夠快速滿足您的所有需求。 一般來說,Apache並不是特別慢。 有更適合嵌入式使用的Web服務器,並且Web服務器更適合盡可能快地提供大量靜態頁面。 在你變得非常大之前,你不應該擔心什么。

播放1.x支持“http.path”設置。

Play 2.1-snapshot已經支持配置設置“application.context”,將應用程序上下文放在子目錄下。

請檢查此提交:

使用[application.context]配置設置允許根上下文。

暫無
暫無

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

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