使用 nginx 为 Flex 应用程序提供 SSL 反向代理

使用 nginx 为 Flex 应用程序提供 SSL 反向代理

我已将 nginx 配置为 Tomcat 实例后端的反向 SSL 代理,该实例为内部 Flex 应用程序提供服务。目的是获得主动/反向对。配置如下:

                        |----- serverb:8080 (10.0.0.1:8080) (http)
servera:443 (ssl) ------|
                        |----- serverc:8080 (10.0.0.2:8080) (http) (backup)

此配置似乎对静态 html 很有效(我可以在 serverb 的 webroot 上看到“check.txt”文本文件,当我终止该 tomcat 实例时,我可以刷新并在 serverc 上看到“check.txt”。所以 nginx 正在故障转移到备份服务器。一切都很好。

当我尝试登录 Flex 应用程序时,问题就开始出现了。AMF 通道出现故障,我在 tomcat 日志中看到以下内容:

SEVERE: Servlet.service() for servlet MessageBrokerServlet threw exception
flex.messaging.security.SecurityException: Secure endpoint '/messagebroker/amfsecure' must be contacted via a secure protocol.

在我的 ngnix 日志中我看到:

10.0.0.99 - - [17/Oct/2011:11:38:02 +0000] "POST /test/BalanceServlet HTTP/1.1" 200 71 "https://servera/test/MainApp.swf" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)"
10.0.0.99 - - [17/Oct/2011:11:38:02 +0000] "POST /test/messagebroker/amfsecure HTTP/1.1" 404 1054 "https://servera/test/MainApp.swf" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)"
10.0.0.99 - - [17/Oct/2011:11:38:02 +0000] "POST /test/messagebroker/amfsecure2 HTTP/1.1" 404 1057 "https://servera/test/MainApp.swf" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)"
10.0.0.99 - - [17/Oct/2011:11:38:02 +0000] "POST /test/messagebroker/amfsecure3 HTTP/1.1" 404 1057 "https://servera/test/MainApp.swf" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)"

开发人员建议下载到浏览器的代码基于它在 URL 栏中看到的内容来决定如何启动 AMF 通道。因此,浏览器到 ngnix 使用 SSL,而 ngnix 到 tomcat 实例使用 http。

查看 remote-config.xml,我有以下默认频道:

<default-channels>
       <channel ref="my-amf"/>
       <channel ref="my-amf2"/>
       <channel ref="my-amf3"/>
       <channel ref="ack-amf"/>
       <channel ref="my-secure-amf"/>
       <channel ref="my-secure-amf2"/>
       <channel ref="my-secure-amf3"/>
       <channel ref="sack-amf"/>
</default-channels>

问题是否出在这个配置上?

答案1

我遇到过类似的事情,但我不知道 Flex,所以我不确定下面我使用的术语是否正确。如果这是我遇到的相同问题,HTTPFox 等工具将显示您的 amf 请求使用 http(而不是 https)到端口 443 访问网站。

修复是在 Flex 端,必须设置客户端配置以利用安全端点或通道(或两者)。这会告诉 flash/flex 应用程序,amf 请求应设置为 https,而不是配置的默认 http。

相关内容