具体的には、専用のWebサーバー(lighttpdやnginxなど)を使用してWebサーバー(Swift / Pythonなど)の指示に従ってプログラムを実行すると、どのような利点がありますか?
具体的には、単にWebフレームワーク(Perfect / Flaskなど)を実行して組み込みルーティングを使用するのとどのように比較されますか?
答え1
これは標準の「Webセキュリティアーキテクチャ」の質問です。
一般的な3階層アプリケーションには
- Webレイヤー
- アプリケーション層
- データベース(または他のバックエンド)層。
別の仕事を手伝うというアイデアです。
したがって、「Web層」は、すべての着信トラフィックの初期終点です。ここでSSL操作をすでに完了している可能性があります。この時点で、SQLインジェクション攻撃やパススルー攻撃などの着信トラフィックをスキャンできるWebアプリケーションファイアウォールなどを注入できます。
ここで終了すると、apache、nginx、またはlighttpdなどのフロントエンドサービスが悪意のあるトラフィック処理、誤った要求履歴にのみ専念し、より「安全」であるという利点があります。誰かがWebサーバーを攻撃する新しい方法(間違ったTCPビットセットでデータを断片化しますか?)を考案すると、親Webサーバーがパッチされると確信できます。ネットワークフレームワークはそれほど重要ではありません。
「クリーン」トラフィックのみがアプリケーション層に転送されます(この通信はHTTPかもしれませんが、より信頼できる送信元から送信されます)。あなたのアプリケーションはバックエンドと通信できます。
理想的には、これらの層はネットワークルーティングルールを使用して別のサーバーに存在する必要がありますが、外部要求サービスは「アプリケーションサーバー」にまったく到達できません。トラフィックがアプリケーションサーバーに到達する唯一の方法は、下位TCP層でもフロントエンドWebサーバーを介することです。しかし、これがなければ、いくつかのセキュリティ上の利点を得ることができます。
2番目の利点は、フロントエンドサービスがHAプロキシになり、複数のバックエンドアプリケーションサーバーに負荷を分散できることです。
3番目の利点は、フロントエンドWebサーバーから静的ファイル(画像、CSS、JavaScriptなど)を提供でき、大量のアプリケーション固有のコンテンツのみがアプリケーションに配信されることです。キャッシュレイヤーなどを追加できます。これにはパフォーマンス上の利点があります。
したがって、ビジネスの観点からは、これらを別々に維持する必要がある多くの理由があります。ただし、より多くの構成および設定操作が必要です。
どこまで行きたいかは個人的な好みです。