0

概述

我正在使用三层架构编写一个 Web 应用程序。我有三台 Amazon EC2 ubuntu 服务器。第一个服务器处理应用程序的演示,并包含我的主闪存文件。第二个 EC2 实例代表我的应用程序服务器。它包含 AMFPHP 文件和相应的 Web 服务。最后,第三个实例处理持久性并运行 MySQL 数据库。演示和应用_服务器正在运行 apache Web 服务器。我创建了特定于每一层的安全组,以便表示层将接受端口 80 上的所有传入流量,而应用程序层将只接受来自表示服务器的传入流量。这应该允许任何人从演示服务器请求我的 Web 应用程序,但阻止任何人访问我的应用程序服务器上的 Web 服务。

问题

我的 Flash 应用程序无法对我的应用程序服务器进行 Web 服务调用。发送请求时,我从未收到来自服务器的响应并最终收到安全沙箱错误。

例子:

Security.loadPolicyFile( "http://<EC2 internal IP or public DNS>/crossdomain.xml" );
gw = new NetConnection();
gw.objectEncoding = ObjectEncoding.AMF0;

// connect to the AMFPHP gateway so we can use the services
gw.connect( "http://<EC2 internal IP or public DNS>/gateway.php" );
res = new Responder( onResult, onFault );
gw.call( "Service.test", res );

调查

没有收到响应似乎很奇怪,所以我决定尝试以下几件事: 1. 我通过 ssh 连接到我的表示层并尝试使用 lynx 连接到我的应用程序服务器的 gateway.php。我能够毫无问题地连接。2. 我在加载我的网站时使用 Chrome 的开发者工具窗口来观察网络流量。我发现它正在尝试使用 GET 请求加载 crossdomain.xml 文件(位于应用程序层上我的 Web 服务器的根目录 [/var/www] 中);但奇怪的是,它超时并失败。这就是我感到困惑的地方。为什么我可以在同一台机器上使用 lynx 连接到应用层的 Web 服务器,但 flash 应用程序却无法访问同一个文件?

其他有用信息

在运行一些测试时,我决定打开应用程序服务器实例的防火墙,以便它可以接收来自我的 IP 的 http 请求。一旦我这样做了,托管在表示层上的应用程序立即开始工作(收到来自 Web 服务的响应)!但是,这意味着我必须强制我的应用程序层接受来自 Internet 的 http 请求才能工作,这不是我想做的事情。我不明白为什么进行此更改会允许应用程序获取 crossdomain.xml 文件。如果应用服务器的安全组被设置为接受来自表示安全组的传入http请求,那么获取驻留在应用服务器的Web服务器根目录中的crossdomain.xml文件应该没有问题吧?

我花了比我想研究这个问题更多的时间。我真的很想为我的应用程序设置一个三层环境,其中 Flash 应用程序将能够向我的应用程序层发送 Web 服务请求。最令人困惑的部分是,当我将计算机的 IP 地址添加到应用程序服务器的防火墙时,一切似乎都按预期神奇地工作了。如果我以错误的方式设置我的应用程序,请纠正我。我的架构基于以下内容:http: //media.amazonwebservices.com/AWS_Web_Hosting_Best_Practices.pdf

谢谢你的帮助!

问候,

将要

4

1 回答 1

0

如果您的服务器都在不同的域上,您必须从您请求数据/文件的服务器加载 crossdomain.xml。



因此,如果您的 swf 在服务器 A 上并且您需要来自服务器 b 的数据,则需要在服务器 b 上加载策略文件

// there is no need to reference the crossdomain.xml.
Security.loadPolicyFile( "http://serverBdomainname.com" )

// or for testing purposes you can use local address but this will not work over the web
// just code in the IP of the server if your machine is on the same network
Security.loadPolicyFile( "192.168.0.111" )

此外,您可能想验证您的 crossdomain.xml 是否可以在浏览器中通过网络访问。
http://serverBdomainname.com/crossdomain.xml

于 2011-08-03T22:20:31.953 回答