Обзор
Я пишу веб-приложение с использованием трехуровневой архитектуры.У меня есть три сервера Amazon EC2 Ubuntu.Первый сервер обрабатывает презентацию приложения и включает мой основной файл флэш-памяти.Второй экземпляр EC2 представляет мой сервер приложений.Он содержит файлы AMFPHP и соответствующие веб-сервисы.Наконец, третий экземпляр обрабатывает персистентность и использует базу данных MySQL.На серверах приложений presentation и работает веб-сервер apache.Я создал группы безопасности, специфичные для каждого уровня, так что уровень представления будет принимать весь входящий трафик через порт 80, тогда как уровень приложения будет принимать только входящий трафик с сервера представления.Это должно позволить любому запрашивать мое веб-приложение с сервера презентаций, но запрещать доступ к веб-службам на моем сервере приложений.
Проблема
Не удается выполнить мое флэш-приложениевеб-сервис звонит на мой сервер приложений.При отправке запроса я никогда не получаю ответ от сервера и в итоге получаю ошибку изолированной программной среды безопасности.
Пример:
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 для наблюдения за сетевым трафиком при загрузке моего сайта.Я обнаружил, что он пытается загрузить файл crossdomain.xml (который находится в корне моего веб-сервера [/ var / www] на уровне приложения) с помощью запроса GET;но, как ни странно, время истекает и терпит неудачу.Это где я запутался.Почему я могу использовать Lynx на той же машине для подключения к веб-серверу на уровне приложений, но приложение Flash не может получить доступ к одному и тому же файлу?
Другая полезная информация
Во время выполнения некоторых тестов я решил открыть брандмауэр экземпляра сервера приложений, чтобы он мог получать запросы http с моего IP.Как только я это сделал, приложение, размещенное на уровне презентации, сразу же начало работать (получил ответ от веб-службы)!Однако это означает, что я должен был бы заставить свой уровень приложений принимать запросы http из Интернета, чтобы работать, а это не то, что я хочу делать.Я не понимаю, почему внесение этого изменения позволило бы приложению получить файл crossdomain.xml.Если группа безопасности сервера приложений настроена на прием входящих http-запросов от группы безопасности презентации, у нее не должно возникнуть проблем с получением файла crossdomain.xml, находящегося в корне веб-сервера сервера приложений, верно?
Я потратил больше времени, чем хотел бы изучить этот вопрос.Я действительно хотел бы установить для своего приложения трехуровневую среду, в которой приложение флэш-памяти сможет отправлять запросы веб-служб на уровень моего приложения.Самым запутанным моментом в этом является тот факт, что когда я добавляю IP-адрес моего компьютера в брандмауэр сервера приложений, кажется, что все волшебным образом работает, как и предполагалось.Пожалуйста, поправьте меня, если я неправильно настраиваю свое приложение.Я основываю свою архитектуру на следующем: http://media.amazonwebservices.com/AWS_Web_Hosting_Best_Practices.pdf
Спасибо за вашу помощь!
С уважением,
Будет