リバース プロキシの背後にある Java Restlet サーバーに非常に奇妙な問題があります。
nginx を使用して URL をポート 8182 の Restlet サーバーにリダイレクトしています。サーバーは次のように構成されています。
server {
listen 8080;
server_name localhost;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
allow all;
root C:/Users/Cyrille/www;
index index.html index.htm;
}
location /proxy/ping {
proxy_pass http://localhost:8182/ping;
}
}
ブラウザを開くか、wget を使用して にアクセスするhttp://localhost:8080/proxy/ping
と、リクエストは Restlet にプロキシされます。単純に「pong」と応答し、そのログが表示されます。
Oct 29, 2013 11:45:04 AM org.restlet.engine.log.LogFilter afterHandle
INFO: 2013-10-29 11:45:04 127.0.0.1 - - 8182 GET /ping - 200 4 - 6 http://localhost:8182 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36 -
問題は、ブラウザーが応答を受信していないように見えることです。数分後にエラー 504: Gateway Time-out でタイムアウトします。直接アクセスするhttp://localhost:8182/ping
と、リクエストはすぐに完了します。
いつリクエストをブロックできますか? ファイアウォールまたはウイルス対策を無効にしました。nginx を Apache に交換したところ、まったく同じ動作が得られました。私はWindows 8を使用しています。