当 GWT 在反向代理后面时,我遇到了这个问题。后端应用程序部署在上下文中 - 我们称之为 /context。
当我直接点击 GWT 应用程序时,它运行良好:
我可以在它前面配置一个反向代理。这是我的 nginx 示例:
上游后端{ 服务器 127.0.0.1:8080; } ... 地点 / { proxy_pass http://backend/context/; }
但是,当我通过反向代理运行时,GWT 会感到困惑,说:
2009-10-04 14:05:41.140:/:WARN: Login: ERROR: the serialization policy file '/C7F5ECA5E3C10B453290DE47D3BE0F0E.gwt.rpc' was not found; 您是否忘记将其包含在此部署中? 2009-10-04 14:05:41.140:/:WARN:登录:警告:无法获取模块“https://hostname:444/”的序列化策略“C7F5ECA5E3C10B453290DE47D3BE0F0E”;将使用与 1.3.3 兼容的旧版序列化策略。因此,您可能会遇到 SerializationExceptions。 2009-10-04 14:05:41.292:/:WARN: StoryService: 错误: 找不到序列化策略文件“/0445C2D48AEF2FB8CB70C4D4A7849D88.gwt.rpc”;您是否忘记将其包含在此部署中? 2009-10-04 14:05:41.292:/:WARN:StoryService:警告:无法获取模块“https://hostname:444/”的序列化策略“0445C2D48AEF2FB8CB70C4D4A7849D88”;将使用与 1.3.3 兼容的旧版序列化策略。因此,您可能会遇到 SerializationExceptions。
换句话说,GWT 没有得到它需要在 /context/ 之前查找 C7F5ECA5E3C10B453290DE47D3BE0F0E.gwt.rpc 的词,但只有当请求通过代理时才需要。一种解决方法是将上下文添加到网站的 url:
位置/上下文/ { proxy_pass http://backend/context/; }
但这意味着上下文现在是用户看到的 url 的一部分,这很丑陋。
有人知道在这种情况下如何让 GWT 开心吗?
软件版本:
GWT - 1.7.0(与 1.7.1 相同问题)
Jetty - 6.1.21(但在 tomcat 下存在相同问题)
nginx - 0.7.62(在 apache 2.x 下相同问题)
我已经使用DonsProxy 查看了代理和后端之间的流量,但没有什么值得注意的。