使用 Play 实现 Web 开发,第 2 部分:在云中释放 Play 的威力(1)
- UID
- 1066743
|
使用 Play 实现 Web 开发,第 2 部分:在云中释放 Play 的威力(1)
第 1 步. 针对生产环境配置应用程序该应用程序的生产设置在 conf/application.prod.conf 中定义。此文件导入开发模式的原始设置(在 conf/application.conf 中定义)并覆盖生产模式中不同的设置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| include "application.conf"
play.crypto.secret=${?PLAY_APP_SECRET}
mongodb.uri = ${?MONGODB_URL}
play.mailer {
mock = false
host = ${?SMTP_HOSTNAME}
user = ${?SMTP_USERNAME}
password = ${?SMTP_PASSWORD}
}
silhouette {
authenticator.cookieDomain="dwplaydemo.mybluemix.net" # Change this
authenticator.secureCookie=true
oauth1TokenSecretProvider.cookieDomain="dwplaydemo.mybluemix.net" # Change this
oauth1TokenSecretProvider.secureCookie=true
twitter.callbackURL="<a href="https://dwplaydemo.mybluemix.net/auth/social/twitter">https://dwplaydemo.mybluemix.net/auth/social/twitter</a>" # Change this
twitter.consumerKey=${?TWITTER_CONSUMER_KEY}
twitter.consumerSecret=${?TWITTER_CONSUMER_SECRET}
}
application.proxy.httpsOnly=true
play.http.forwarded.trustedProxies=["::1","127.0.0.1","108.168.250.0/24"]
|
应用程序域必须在 Bluemix 中是唯一的。选择一个唯一名称来替换 dwplaydemo.mybluemix.net 的 dwplaydemo 部分。替换 conf/application.prod.conf 中(和应用程序代码中)每个标有 Change this 注释的地方。
针对安全性的环境变量在生产模式下,应用程序机密获取自一个名为 PLAY_APP_SECRET 的环境变量。应用程序机密很重要,因为弱密码会使欺骗 Play 会话变得很容易。(在第 4 步中,您将看到如何生成一个良好的应用程序机密。)类似地,MongoDB 生产 URI 和邮件收发器服务配置从环境变量读取。
您从 已知道,该应用程序使用 执行身份验证。Silhouette 生产设置是相同的,除了身份验证器和 OAuth1 令牌机密 cookie,您必须更改它们来与 Bluemix 将用于该应用程序的域匹配。还要更改 Twitter OAuth1 回调来与应用程序的 Bluemix 域匹配。像应用程序机密一样,出于安全原因,用户密钥和机密从环境变量获取。
Bluemix、代理和 HTTPSBluemix 中我特别喜欢的一个特性是,它通过前端 Web 服务器来透明地代理应用程序。这个服务器允许通过标准端口执行 HTTP 和 HTTPS 访问,为 HTTPS 访问定义一个有效的证书,并采用伪标准的 X-Forwarded 头部。但需要知道:
- 代理 HTTP 访问无法关闭。
- 请求始终以 HTTP 形式转发到应用程序(无论是否通过 HTTPS 访问该代理)。
如果您希望仅允许 HTTPS(我就是这么做的),代理 HTTP 访问无法关闭的事实将成为问题。该应用程序中的解决办法是在 application.prod.conf 中定义一个临时 application.proxy.httpsOnly 属性设置。该属性在设置为 true 时会启用一个过滤器来拒绝其 X-Forwarded-Proto 头部未设置为 https 的请求。
在应用程序必须发送的电子邮件中包含用户必须访问才能继续操作的 URL 时,以 HTTP 形式转发请求会在注册和密码重置流中导致问题。因为应用程序仅接收不受保护的请求,所以这些 URL 将错误地使用 HTTP 协议。幸运的是,Play 已准备好处理这些情况:play.http.forwarded.trustedProxies 设置使用 定义一个受信任代理链。此定义告诉 Play,如果 X-Forwarded-For 链中的任何主机拥有在受信任代理链中的地址范围外的地址,则使用 X-Forwarded-Proto 头部的值来确定请求协议。 |
|
|
|
|
|