逆向代理背后的GWT问题 – 无论是nginx或apache

我原来就这个问题提出过这个问题 ,但也许SF 在这个问题上是一个更好的地方。

我在使用GWT时,遇到了逆向代理的问题。 后端应用程序部署在上下文中 – 我们称之为/上下文。

当我直接点击它时,GWT应用程序工作正常:

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

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

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

 ...

位置 / {
    proxy_pass http:// backend / context /;
 }

但是,当我运行反向代理时,GWT会感到困惑,他说:

 2009-10-04 14:05:41.140:/:WARN:Login:ERROR:未find序列化策略文件“/C7F5ECA5E3C10B453290DE47D3BE0F0E.gwt.rpc”; 你忘了把它包含在这个部署中吗?
警告:无法获取模块“https://主机名:444 /”的SerializationPolicy“C7F5ECA5E3C10B453290DE47D3BE0F0E”。 一个传统的1.3.3兼容的序列化策略将被使用。 您可能会遇到SerializationExceptions。
 2009-10-04 14:05:41.292:/:WARN:StoryService:错误:未find序列化策略文件“/0445C2D48AEF2FB8CB70C4D4A7849D88.gwt.rpc”; 你忘了把它包含在这个部署中吗?
 2009-10-04 14:05:41.292:/:WARN:StoryService:警告:未能获取模块“https://主机名:444 /”的SerializationPolicy“0445C2D48AEF2FB8CB70C4D4A7849D88”; 一个传统的1.3.3兼容的序列化策略将被使用。 您可能会遇到SerializationExceptions。

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

位置/上下文/ {
     proxy_pass http:// backend / context /;
 }

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

有人知道如何使GWT在这种情况下快乐吗?

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

我怀疑是GWT可能在Referer头文件中出现,并且感到困惑(是否有nginxclosures这个头文件的方法?),或者说,由于代理和GWT / Jetty之间的stream量是HTTP / 1.0而不是HTTP / 1.1。

我想你应该

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

然后使用重写从URL中去除/上下文部分