2

在播放前运行前端代理时我遇到了很多困难。这篇文章也在谷歌群里,我会把收到的建议都贴出来。

我正在使用 apache 和 mod_proxy,应用程序应该在“mywebsite.be/dev/app/”位置运行。它能够显示 HTML。

但是当我运行应用程序时,所有的 CSS/JS/图像都丢失了,所有的引用也不正确。我查找了源代码,似乎 Play 没有替换 @{/pathname/to/resources} 和其他指向其正确 URL 的相关链接。为了让一切正常工作,所有 url 都应以“/dev/app”为前缀。如何才能做到这一点?

我尝试使用 ctxPath 进行试验,但这不是我需要的,应用程序本身运行良好,但 apache2 在反向代理中翻译所有这些 url 时遇到问题。

这可以解决吗?我正在考虑以某种方式在模板系统中编辑@-operator,但这不可能,对吧?

问候,贾斯珀

4

3 回答 3

2

你看过这个帖子吗?我认为这是相关的。

使用 Apache 作为代理时,无法使用 playframework 为静态资源生成正确的 URL

另外,请留意 Play 1.2.2,因为它旨在解决这个问题,根据我在 Play 组中阅读的帖子。

于 2011-05-14T15:59:45.247 回答
1

我的一位队友想出了答案。这很简单。

如果您有 apache2 配置,而不是指向 localhost 根,您只需指向 localhost:9000/dev/app:

ProxyPreserveHost On
RedirectMatch /dev/app /dev/app/
<Location /dev/app/>
AuthType Basic
AuthName "Test Omgeving"
AuthUserFile /var/trac/htpasswd
Require valid-user

ProxyPass http://127.0.0.1:9000/dev/app/
ProxyPassReverse http://127.0.0.1:9000/dev/app/
</Location>

这使 apache2 认为您的 localhost 服务器中有另一个子目录,但实际上没有,但现在它正确引用,因此将所有流量转换为相应的资源。

也许不是优雅的做事方式,但效果很好:)

感谢所有的帮助。希望这篇文章可以帮助其他使用前端代理的人。

问候

于 2011-05-15T08:13:26.713 回答
0

我建议您使用代理平衡器,因为如果您计划将来使用多个播放服务器实例,它将有助于平衡您的服务器

 <Proxy balancer://my-balancer>
    Order deny,allow
    Allow from all
    BalancerMember url1:port route=instanceOne
    BalancerMember url2:port route=instanceTwo
    ProxySet lbmethod=bytraffic
    </Proxy>
    ProxyPass /  balancer://my-balancer/

现在它将您的流量传递给 url1:port 或 url2:port 并且它还将获取您的图像和其他静态 url

于 2012-12-13T05:11:41.427 回答