我在Apache反向代理后面部署Play 2.3应用程序时遇到了一些麻烦。在这种特殊情况下,必须在子uri和SSL下访问应用程序。简而言之,这就是我想要做的事情:
例如,当我输入“https://server.tld/playtool”时,我想访问播放应用程序的根目录。 但是,这不起作用:
这是我主持的Apache配置:
<IfModule mod_proxy.c>
ProxyPreserveHost on
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /playtool http://127.0.0.1:9000 retry=0
ProxyPassReverse /playtool http://127.0.0.1:9000 retry=0
</IfModule>
以下是关于proxying / subUri的播放应用程序的一部分
application.baseUrl="https://server.tld"
XForwardedSupport=127.0.0.1
XForwardedProto=https
XForwardedSupport=127.0.0.1
http.path="/playtool"
有谁知道该怎么办?提前谢谢!
答案 0 :(得分:1)
以下几点可能会有所帮助。
我仍然想找到一种在相对URL下生成资产的方法,但是可以通过这种方式设置绝对URL,从而允许Apache服务器重定向调用。
如果您的页面位于/playtool
下,那么您可以更改播放应用程序配置,将所有资源指向/play/assets
,而不仅仅是/assets
。这样,您就可以识别每个应用程序的资产,并确保仅重定向所需的资产。
GET /play/assets/*file controllers.Assets.versioned(path="/public", file: Asset)
这将允许您重定向到这些资产,如下所示:
RewriteEngine On
RewriteRule ^/play/assets/(.*)$ https://server.tld/playtool/play/assets/$1 [R]
关于您的其他问题 - 链接无效。这很容易解决。您只需要没有绝对链接(不是以/
开头)并且必须定义基本HTML标记。有关标记的详细信息,请参阅http://www.w3schools.com/tags/tag_base.asp。
您可以拥有以下内容:
<base href="/playtool/">
希望这会有所帮助。我自己对资产重定向解决方案并不满意,所以如果您已经找到了更好的解决方法,请告诉我。
编辑:
您可以代替/play
下的所有内容重定向另一个代理。像这样:
<Location /play>
ProxyPass http://127.0.0.1:9000/play
ProxyPassReverse http://127.0.0.1:9000/play
</Location>
编辑2:
我终于设法只使用一个代理,而不更改资产&#39;位置。
以下是Apache端的代理配置:
<LocationMatch ^\/playtool\/?(.*)$>
ProxyPass http://127.0.0.1:9000/playtool/$1
ProxyPassReverse http://127.0.0.1:9000/playtool/$1
SetOutputFilter DEFLATE
</LocationMatch>
然后在Play端,您需要添加play.http.context
,以设置您的应用程序上下文。
play.http.context="/playtool/"
当然,您还需要配置基本HTML标记。