BlazeDS Servlet 未通过代理响应
我在通过代理 (Apache) 在 Tomcat 5.5 上使用 Flex 和 BlazeDS 时遇到问题。我已经搜索过但没有找到解决我的问题的答案。我希望你们能帮助我。 :-)
我们的场景如下:
Flex-App 使用 BlazeDS 与 Tomcat 5.5 上的数据服务进行通信。 Web 应用程序启用了 balze,并且服务配置包含如下所示的通道定义:
<channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel">
<endpoint url="http://xxx.xxx.xxx.xxx:8180/myDataService/messagebroker/amf" class="flex.messaging.endpoints.AMFEndpoint">
</channel-definition>
我将 Flex Server 根 URL 设置为 http://xxx.xxx.xxx.xxx:8180/myDataService
(上下文根: /myDataService) 并根据此服务配置编译我的 Flex 应用程序。
之后,我在 IP 地址为 xxx.xxx.xxx.xxx 的服务器上部署 Flex 应用程序和数据服务。之后这两个应用程序都可用 使用 http://xxx.xxx.xxx.xxx:8180/myFlexApp
或对于数据服务:http://xxx.xxx.xxx.xxx:8180/myDataservice
tomcat 正在侦听端口 8180。
如果我使用带有 IP 地址的 URL 打开我的 Flex 应用程序,一切都会正常工作。我的应用程序正在完美接收数据。
好的。到目前为止一切都很好。
现在我想使用代理服务器(通过apache http服务器)来隐藏ip并使用域名。
我对我的服务配置进行了以下更改:
<channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel">
<endpoint url="http://mydomain.com/data/messagebroker/amf" class="flex.messaging.endpoints.AMFEndpoint">
</channel-definition>
我将 Flex 服务器根 URL 设置为 http://mydomain.com/data
(上下文根 /data),并针对此服务编译我的 Flex 应用程序 -配置。
我再次将应用程序部署在与之前相同的 tomcat 上。
现在,我在 apache 目录 (etc/apache2/sites-available/) 的 site-available (sites-enabled) 文件夹中创建一个名为 mydomain.com 的条目 我使用服务器名称 www.mydomain.com 和服务器别名 mydomain.com 创建虚拟主机。我还在代理块中添加了必要的规则以及虚拟主机定义所需的其他内容。 此文件中包含以下 ProxyPass/ProxyPassReverse 条目:
ProxyPass /flexApp http://xxx.xxx.xxx.xxx:8180/myFlexApp
ProxyPassReverse /flexApp http://xxx.xxx.xxx.xxx:8180/myFlexApp
ProxyPass /data http://89.19.229.148:8180/myDataservice
ProxyPassReverse /data http://89.19.229.148:80/myDataservice
之后,我可以在浏览器中使用 http://www.mydomain.com/flexApp
打开 Flex 应用程序并加载它。但是,当它尝试使用 blazeds 联系数据服务时,会抛出一条错误消息。 我什至无法打开 URL http://mydomain.com/data/messagebroker/amf
。显示 404 错误。之前 - 使用 IP 地址 - 显示空白页面。 奇怪的是,非 blaze Servlet 工作正常。 eG 我可以打开 http://mydomain.com/data/myServlet
并且它可以工作。只有Blaze不起作用。
您是否知道为什么会出现此问题以及我如何解决它。预先非常感谢。你真是帮我大忙了!!!
亨里克
I have a problem using Flex with BlazeDS on a Tomcat 5.5 through a Proxy (Apache). I already searched for it but didn't find answers which solved my problem. I hope you guys can help me out. :-)
Our scenario is the following:
Flex-App using BlazeDS to communicate with our Dataservice on a Tomcat 5.5. The Webapp is balze enabled and the services config contains channel definitions like the following:
<channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel">
<endpoint url="http://xxx.xxx.xxx.xxx:8180/myDataService/messagebroker/amf" class="flex.messaging.endpoints.AMFEndpoint">
</channel-definition>
I set the Flex Server Root URL to http://xxx.xxx.xxx.xxx:8180/myDataService
(Context Root: /myDataService) and compile my flex application against this services-config.
After that I deploy my flex application and my dataservice on a server with some ip address xxx.xxx.xxx.xxx. The two applications are available after that
using http://xxx.xxx.xxx.xxx:8180/myFlexApp
or for the dataservice: http://xxx.xxx.xxx.xxx:8180/myDataservice
The tomcat is listening on port 8180.
If I open my flex application using the URL with the ip address everything is working fine. My application is receiving data perfectly.
Ok. Everything fine so far.
Now I want to use a proxy server (via apache http server) to hide the ip and use a domain name.
I do the following changes to my services-config:
<channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel">
<endpoint url="http://mydomain.com/data/messagebroker/amf" class="flex.messaging.endpoints.AMFEndpoint">
</channel-definition>
I set the Flex Server Root URL to http://mydomain.com/data
(Context Root /data) and compile my flex application against this services-config.
I deploy the applications again on the same tomcat as before.
Now I create an entry in the sites-available (sites-enabled) folder of my apache directory (etc/apache2/sites-available/) called mydomain.com
I create a Virtual Host with ServerName www.mydomain.com and ServerAlias mydomain.com. I also add the neccessary rules in the Proxy block and the other stuff neccessary for the virtual host definition.
The following ProxyPass/ProxyPassReverse entries are contained in this file:
ProxyPass /flexApp http://xxx.xxx.xxx.xxx:8180/myFlexApp
ProxyPassReverse /flexApp http://xxx.xxx.xxx.xxx:8180/myFlexApp
ProxyPass /data http://89.19.229.148:8180/myDataservice
ProxyPassReverse /data http://89.19.229.148:80/myDataservice
After that I can open the flex Application with http://www.mydomain.com/flexApp
in the browser and it loads. But an error message is thrown when it tries to contact the dataservice using blazeds.
I even can't open the URL http://mydomain.com/data/messagebroker/amf
. A 404 Error is displayed. Before - using the ip address - a blank page was displayed.
The weird thing is, that the non-blaze Servlets are working fine. e.G. I can open http://mydomain.com/data/myServlet
and it works. Only Blaze doesn't work.
Do you have any ideas why this problem occurs and how i may solve it. Thanks a lot in advance. You're really helping me out!!!
Henrik
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
BlazeDS 和 Flex 应用程序都使用通道定义端点中的 URL。但 URL 实际上需要不同。 BlazeDS 需要使用 myDataservice/messagebroker/amf URL,而 Flex 应用程序需要使用 data/messagebroker/amf URL。因此,您可以使两个 URL 相同,即。我的数据服务
而不是数据。或者,您可以在 Flex 应用程序中手动设置频道信息,而不是让它读取 services-config 文件。
Both BlazeDS and the Flex app are using the URL in the channel-definition's endpoint. But the URLs actually need to be different. BlazeDS needs to use the myDataservice/messagebroker/amf URL while the Flex app needs to use the data/messagebroker/amf URL. So you can either make both URLs the same, ie. myDataservice
instead of data. Or you can manually set the channel information in the Flex app instead of having it read the services-config file.
我使用 AJP 进行请求重定向:
代理配置看起来像这样:
I'm using AJP for the request redirection:
The proxy configuration looks like this: