2013-06-06 22 views
8

私はApacheの背後にある竜巻を実行しています。プロキシサーバーを作成しました。Apacheの逆プロキシの無制限タイムアウト

このコードはうまく動作し、すべての私の要求を竜巻に渡し、応答をクライアントに返します。

今、私は長いポーリングに竜巻を使用しています。短い時間間隔で終了する要求の中には、このリバースプロキシがうまく動作することが1分未満であると言うものがあります。しかし、長いポーリング要求があると、これは502プロキシエラーとなります。このプロキシエラーの理由は、Apacheが(デフォルトで)1分間だけ長いポーリング要求を保持できるためです。要求をクローズし、したがってプロキシエラーが受信されます。

今、私は12000秒に既定のタイムアウトを変更

ProxyRequests On 
ProxyPass /chat/ http://localhost:8888/chat/ timeout=12000 

すなわちにディレクティブを変更しました。

これは現在、私にとってうまくいきます。これは問題の最良の解決策ではありません。理想的に長いポーリング要求は、指定されたタイムアウトを超えることができます。だから私の質問は

  1. どのようにタイムアウトを無限にするのですか?つまり、要求はApacheによって決して閉じられません。
  2. また、竜巻の性能がプロキシサーバーとしてApacheを通過することによって低下するかどうかをご確認ください。
+0

ねえ、私の答えはあなたに全く助けてくれましたか?あなたはその答えにコメントできますか? – vaidik

答えて

1

Nginxで同様の問題が発生し、同じ方法で解決しました。しかし、私は十分に大きかったので、タイムアウトを1日に変更しました。

私はあなたがこれをやめることはできないと思います。この背後にある根拠は、Apache(またはそのようなプロキシサーバー)はパフォーマンスを維持しなければならないことです。古い接続または非アクティブな接続を保持する必要がある場合は、明らかにできません。あなたはむしろ、プロキシサーバーのプロキシにアクティブでない接続よりもアクティブな接続を許可したいでしょう。

したがって、ApacheやNginx(Proxy_read_timeoutを使用して設定)でProxyTimeoutを無効にする方法はありません。したがって、プロキシされたサーバーがタイムアウト内に応答を送信しない場合、アプリケーションサーバーが応答に時間がかかりすぎるか、アプリケーションサーバーに問題があるか、またはクライアントが応答を要求していません。最初のケースでは、適切なタイムアウトを設定するための安全な見積もりを行うことができます。 2番目のケースでは、アプリケーションサーバーを修正する必要があります。 3番目のケースでは、クライアント上の状況を正常に処理し、必要に応じて再接続する必要があります。

2番目の質問には、ApacheとTornadoサーバーの間のレイテンシ以外の違いはありません。あなたはTornadoサーバーを世界に直接公開することができますが、それにはいくつかの課題があります。 1.より多くのopsが動作する - Tornadoプロセスが常に稼働していることを確認してください。 2.プロキシと負荷分散がより困難になります。 3.何千人もの専門家からではなく、そのコードを書いているのでセキュリティが悪くなりました。ですから、毎回このサーバーをrootとして実行することを考えるべきではありません。しかし、ApacheやNginxでも安全に並べ替えることができます。

もちろん、上記の問題は解決できますが、なぜすでに解決済みの問題を解決していますか? :)

関連する問題