sinatra(ruby)、play(scala)、lift(scala)などのWebアプリケーションフレームワークは、特定のポートをリッスンするWebサーバーを生成します。
セキュリティ、クラスタリング、場合によってはパフォーマンスなど、いくつかの理由があり、Webアプリケーションの前でApacheWebサーバーを使用する可能性があることを私は知っています。
あなたの経験から、これには何か理由がありますか?
sinatra(ruby)、play(scala)、lift(scala)などのWebアプリケーションフレームワークは、特定のポートをリッスンするWebサーバーを生成します。
セキュリティ、クラスタリング、場合によってはパフォーマンスなど、いくつかの理由があり、Webアプリケーションの前でApacheWebサーバーを使用する可能性があることを私は知っています。
あなたの経験から、これには何か理由がありますか?
そして、2013 年 1 月 30 日の Airbnb テック トークで Isaac Schluetter からの半公式の回答が必要な場合に備えて、彼はノードが安定しており、インターネットへの直接接続を提供するのに十分安全であるかどうかという質問に答えています. 彼の答えは基本的に「はい」です。したがって、それを行うことができ、おそらく安定性とセキュリティの観点からは問題ないでしょう (アプリ サーバー プロセスの予期しない終了を処理するためにクラスターを使用していると仮定します)。別の Web サーバーまたはリバース プロキシ/キャッシュの背後にあります。
私は追加します:
多くの場合、フレームワークは必要なすべてを実行しますが、その上にレイヤーを追加すると、圧縮、セキュリティ、セッション管理、負荷分散などの一見無料の機能を提供できる場合があります。それでも、Web サーバーを追加するとセキュリティの問題が発生する可能性があります。たとえば、Web サーバーのセキュリティは、Lift 自体よりも簡単に侵害される可能性があります。また、一部の Web フレームワークは非常にスケーラブルであり、不適切に選択された Web サーバーによって妨げられることさえあります。
要約すると、フレームワークによって提供されない Web サーバーのような機能が必要な場合、Web サーバーは非常に良いオプションかもしれませんが、適切に構成し、セキュリティ パッチなどで定期的に更新することがもう 1 つ重要であることを覚えておいてください。
たとえば、暗号化または圧縮だけが必要な場合は、正しいライブラリまたはプラグインをフレームワークに追加するだけで、それが可能になる場合があります (それだけです)。
プロキシ http サーバーを使用すると、フレームワークは、計算されたコンテンツを提供するために http 接続を開いたままにしておく必要がなくなり、他の要求の処理を開始できます。バッファーとして機能します。
車輪の再発明の問題です。ほとんどのフレームワークは開発環境を提供しますが、本番環境では通常、本番環境で発生するすべての問題に対処できる商用/オープン ソース プロジェクトを使用することをお勧めします。
フレームワークを構築する人はフレームワークに集中できますが、サーバーを構築する人は同じことを行っています (完成)。