GeoServer を使用する OpenLayers Web アプリを開発しました。GeoServerのproxy_passセットアップを使用して、nginxをWebサーバーとして使用しています。「localhost」を使用するとすべてが期待どおりに機能しますが、IP アドレスに切り替えると、504 ゲートウェイ タイムアウト エラーが発生します。
http://98.153.141.207/geoserver/cite/wfs.
GeoServer にアクセスできます
http://98.153.141.207/geoserver/web
問題なくブラウザ経由でプロキシが期待どおりに動作し続けているように見えます。
問題が発生すると、GeoServer ログに次のように表示されます。
Request: describeFeatureType
service = WFS
version = 1.1.0
baseUrl = http://98.153.141.207:80/geoserver/
typeName[0] = {http://www.opengeospatial.net/cite}MyLayer
outputFormat = text/xml; subtype=gml/3.1.1
それから 1 分後、JavaScript コンソールに 504 Gateway Time-Out が表示され、これが GeoServer ログに表示されます。
09 May 06:02:15 WARN [geotools.xml] - Error parsing: http://98.153.141.207/geoserver/wfs/DescribeFeatureType?version=1.1.0&typename=cite:MyLayer
この想定される問題の URL をブラウザーで試してみましたが、問題なく動作します。
nginx エラー ログには次の内容が含まれます。
2013/05/09 06:02:15 [error] 420#3844: *54 upstream timed out (10060: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond) while reading response header from upstream, client: 98.153.141.207, server: localhost, request: "GET /geoserver/wfs/DescribeFeatureType?version=1.1.0&typename=cite:MyLayer HTTP/1.1", upstream: "http://127.0.0.1:8080/geoserver/wfs/DescribeFeatureType?version=1.1.0&typename=cite:MyLayer", host: "98.153.141.207"
さらに調査すると、この問題は WFS レイヤーのみに限定されているように思われることがわかりました。WMS レイヤーは問題なく動作します。失敗した WFS レイヤーの宣言は次のとおりです。
myLayer = new OpenLayers.Layer.Vector("MyLayer",
{
strategies: [new OpenLayers.Strategy.BBOX(),saveStrategy],
projection: "EPSG:2276",
protocol: new OpenLayers.Protocol.WFS(
{
version: "1.1.0",
url: "http://" + hostip + "/geoserver/cite/wfs",
featureNS: "http://www.opengeospatial.net/cite",
srsName: "EPSG:2276",
featureType: "MyLayer",
geometryName: "Poly",
schema: "http://" + hostip + "/geoserver/wfs/DescribeFeatureType?version=1.1.0&typename=cite:MyLayer"
})
});
どんな助けでも大歓迎です。ありがとう
レイヤーの OpenLayer.Protocol.WFS から「スキーマ」プロパティを削除することで、これを機能させることができました。なぜこれが問題になるのか、誰か説明できますか?