[英]How to setup Play on a sub-directory, behind an Apache reverse proxy?
我有一個Apache 2前端,它提供兩種請求:
MOD-proxy.conf
ProxyPass /playapp/ http://localhost:9000/
ProxyPassReverse /playapp/ http://localhost:9000/
最終結果是請求說http://mysite.com/playapp/Controller/action
以http://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.css
: http://mysite.com/playapp/public/stylesheets/style.css
此外,我確實需要一些能力鏈接Play應用程序之外。 例如,我希望將主路由(/)映射到我的絕對根( http://mysite.com/
),而不是Play的根。
首先,重要的是:apache2不能(輕松)更改頁面中的鏈接。 所以Play必須提供正確的。
使用子域將使所有這些完全透明,但讓我們解決您的問題。
你的問題確實有兩點,
使用剛設置的路線
GET / playapp / public / staticDir:public
你在使用http.path嗎?
我認為反向應該考慮到它......
這聽起來很簡單:如果它在播放應用程序之外,那么你沒有使用反向網址,所以只需將絕對路徑放在你的鏈接中......或者你正在使用反向? 如果是這樣,你能提供一個例子嗎?
你有沒有配置你的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”,將應用程序上下文放在子目錄下。
請檢查此提交:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.