1

目前,我们在端口 9000 上运行我们的 Play 应用程序,使用 Apache 作为前端 HTTP 服务器,如下所示:

<VirtualHost *:80>
    ServerName vms.gltd.net

    ProxyPass /http-bind http://vms.gltd.net:5280/http-bind/
    ProxyPassReverse /http-bind http://vms.gltd.net:5280/http-bind/

    ProxyPass / http://vms.gltd.net:9000/
    ProxyPassReverse / http://vms.gltd.net:9000/
</VirtualHost>

但是,当用户注册 Play Authenticate 时,使用来自 play.mvc.Http.Request 的端口是 9000 而不是 80。

有没有办法覆盖 Play Authenticate 使用的端口,还是我们必须将我们的 Play 应用程序移动到它自己的服务器并在端口 80 上运行它?

谢谢,

-莱昂

4

1 回答 1

0

试试这个,来自Play 文档

高级代理设置

使用 HTTP 前端服务器时,请求地址被视为来自 HTTP 服务器。在通常的设置中,Play 应用和代理都在同一台机器上运行,Play 应用将看到来自 127.0.0.1 的请求。

代理服务器可以在请求中添加特定的标头,以告知代理应用程序请求来自何处。大多数 Web 服务器将添加一个 X-Forwarded-For 标头,其中远程客户端 IP 地址作为第一个参数。如果代理服务器在 localhost 上运行并从 127.0.0.1 连接,Play 将信任其X-Forwarded-For标头。如果您在另一台机器上运行反向代理,您可以trustxforwarded在应用程序配置文件中将配置项设置为 true,如下所示:

trustxforwarded=true 

但是,主机头没有被触及,它将仍然由代理发出。如果您使用 Apache 2.x,您可以添加如下指令:

ProxyPreserveHost on 

host:头将是客户端发出的原始主机请求标头。通过结合这两种技术,您的应用程序将看起来直接暴露。

如果你不希望这个 play 应用占据整个根目录,请在代理配置中添加排除指令:

ProxyPass /excluded !
于 2014-01-09T09:05:30.167 回答