反向代理背后的 GWT 问题(nginx 或 apache)

反向代理背后的 GWT 问题(nginx 或 apache)

我原本在 SO 上问了这个问题但也许旧金山是解决这个问题的更好的地方。

当 GWT 位于反向代理之后时,我遇到了这个问题。后端应用程序部署在上下文中 - 我们称之为 /context。

当我直接点击它时,GWT 应用程序运行良好:

http://主机:8080/上下文/

我可以在它前面配置一个反向代理。这是我的 nginx 示例:

上游后端 {
    服务器 127.0.0.1:8080;
}

...

地点 / {
   代理通过 http://backend/context/;
}

但是,当我通过反向代理运行时,GWT 变得困惑,说:

2009-10-04 14:05:41.140:/:WARN: 登录: 错误: 未找到序列化策略文件“/C7F5ECA5E3C10B453290DE47D3BE0F0E.gwt.rpc”;您是否忘记将其包含在此部署中?
2009-10-04 14:05:41.140:/:WARN: 登录:警告:无法获取模块“https://hostname:444/”的 SerializationPolicy“C7F5ECA5E3C10B453290DE47D3BE0F0E”;将使用与 1.3.3 兼容的旧版序列化策略。因此,您可能会遇到 SerializationException。
2009-10-04 14:05:41.292:/:WARN: StoryService: 错误:未找到序列化策略文件“/0445C2D48AEF2FB8CB70C4D4A7849D88.gwt.rpc”;您是否忘记将其包含在此部署中?
2009-10-04 14:05:41.292:/:WARN: StoryService: 警告:无法获取模块“https://hostname:444/”的 SerializationPolicy“0445C2D48AEF2FB8CB70C4D4A7849D88”;将使用与 1.3.3 兼容的旧版序列化策略。因此,您可能会遇到 SerializationException。

换句话说,GWT 没有得到它需要添加 /context/ 然后查找 C7F5ECA5E3C10B453290DE47D3BE0F0E.gwt.rpc 的词,但只有当请求通过代理时才会得到。一种解决方法是将上下文添加到网站的 URL 中:

位置 /上下文/ {
    代理通过 http://backend/context/;
}

但这意味着上下文现在是用户看到的 url 的一部分,这很糟糕。

在这种情况下有人知道怎样让 GWT 满意吗?

软件版本:
GWT - 1.7.0(与1.7.1有同样的问题)
Jetty - 6.1.21(但在tomcat下存在同样的问题)
nginx - 0.7.62(在apache 2.x下存在同样的问题)

我怀疑 GWT 可能正在接收 Referer 标头,并且感到困惑(nginx 有没有办法关闭该标头?)或者存在差异,因为代理和 GWT/Jetty 之间的流量是 HTTP/1.0 而不是 HTTP/1.1。

答案1

我想你应该

location /context/ {
    proxy_pass        http://backend/context/;
}

然后使用重写从 URL 中删除 /context 部分

相关内容