GWT がリバース プロキシの背後にある場合、GWT でこの問題が発生します。バックエンド アプリはコンテキスト内にデプロイされます。これを /context と呼びましょう。
直接ヒットすると、GWT アプリは正常に動作します。
その前にリバース プロキシを構成できます。これが私のnginxの例です:
アップストリーム バックエンド { サーバー 127.0.0.1:8080; } ... 位置 / { proxy_pass http://backend/context/; }
しかし、リバース プロキシを介して実行すると、GWT は次のように混乱します。
2009-10-04 14:05:41.140:/:警告: ログイン: エラー: シリアル化ポリシー ファイル '/C7F5ECA5E3C10B453290DE47D3BE0F0E.gwt.rpc' が見つかりませんでした。この展開に含めるのを忘れましたか? 2009-10-04 14:05:41.140:/:警告: ログイン: 警告: モジュール 'https://hostname:444/' の SerializationPolicy '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/' の SerializationPolicy '0445C2D48AEF2FB8CB70C4D4A7849D88' の取得に失敗しました。従来の 1.3.3 互換のシリアル化ポリシーが使用されます。その結果、SerializationExceptions が発生する場合があります。
言い換えれば、GWT は /context/ を前に追加して C7F5ECA5E3C10B453290DE47D3BE0F0E.gwt.rpc を探す必要があるという言葉を受け取っていませんが、それは要求がプロキシ経由で来た場合のみです。回避策は、Web サイトの 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を使用してプロキシとバックエンドの間のトラフィックを確認しましたが、特筆すべき点はありません。