とあるデータをPythonでMongoDBに収集して、そのデータをLiteSpeedとvue.jsで作成したwebサイトに
ランキング形式で表示させるwebアプリケーションを作りたいと思っています。
LiteSpeedはWebサーバですが、
本質的なWebサーバとは違い、多少簡略化した端折った存在です。
まずそこを解説しておかなければどういう行動を取るべきかも判断出来ません。
WebサーバはChrome等のブラウザからHTTPリクエストを受け付けて
情報を文字列化して送り返す仕組みを指します。
LiteSpeedやApache等のWebサーバアプリは、
ハードディスク上に保存した特定のフォルダ配下を、
Webサーバのルートだ!…とみなして、スラッシュ記号で区切ったファイルのパスをHTTPリクエストで指定すると、ファイルの中身をHTTPレスポンスとして送り返すという思想で運用する思想で作られたWebサーバです。
このHTTPリクエストやHTTPレスポンスはインターネットを作った人達が準備したルールに従って行います。
規約(プロトコル)とか言われています。
なのでHTTPリクエストを受け付けて、
HTTPレスポンスを正しく返す仕組みならば
全て妥当なWebサーバ足り得るのです。
調べたらAPサーバーをwebサーバーとDBサーバーの間に挟むというような記述を見ました。
APIサーバの事を言いたいのかな?
HTTPリクエストを受け取って、
HTTPレスポンスを投げ返すという本質で言えば
これは単なるWebサーバですね。
HTTPリクエストを受け取って、
Node.jsなりPHPなりのコードを実行して、
MongoDBに通信を行い集計や検索等の処理を挟んで情報を取得し
泥縄でHTTPレスポンスを生成してから投げ返す事になります。
こういったやり方でHTTPレスポンスを返すものを動的コンテンツと呼びます。
参考記事: 静的コンテンツと動的コンテンツ
APサーバーとしてTomcat、Node.js、Netty、Unicornなど様々なものがありどれを使うのがよいか分かりません。
大抵のプログラミング言語は、
HTTPリクエストを受け付けて、
HTTPリクエストを返すためのモジュールが用意されています。
JavaでもNode.jsでも、PHP、Ruby、Python...全て目的のものを作る事が可能です。
自分がこの言語なら開発出来ると思った言語を使ってWebサーバを開発してください。
ただし、MongoDBが裏にあるならMongoDBと通信して情報を読み書き出来るモジュールがあるかものの方が楽でしょう。
参考記事: MongoDB Drivers and ODM
データをどのようにしてwebサーバーに渡すのでしょうか。
どうやって開発するのかはさておき、
下記のWebサーバが完成したとしましょう。
- LiteSpeedを利用した静的ファイルの配信Webサーバ
- MongoDBを読み込んで結果を返すAPIサーバ
このままでは通信を行う事は出来ません。
HTTP通信を待ち受けるデフォルトのポート番号は80番(HTTPSは443番)で世界共通です。
例えばhttp://teratail.com:80/questions/248961
という風にドメイン名の後ろに明示的に:80
という文字列をくっつける事で80番ポートを利用した通信を行う事が可能です。
マシン上で起動したアプリケーションはOSに80番ポートの専有許可をもらいます。
後からきたら弾かれます。
なのでこの2つのサーバは共存できません……なんてこった。
そこでリバースプロキシを利用します。
LiteSpeedに80番ポートを使わせておき、MongoDB用のAPIサーバは適当に8000番ポートでも割り振っておきます。
LiteSpeedの設定を変更、
/api
配下のパスにHTTPリクエストが届いたら、APIサーバの8000番ポートにリクエストを受け流して代わりに結果を返してもらう!
これにより実現可能です。
このリクエストを受け流す仕組みをリバースプロキシと呼びます。
LiteSpeedは設定等がApache互換だそうなので、
「Apache リバースプロキシ」みたいなワードでググればなんとかなるんじゃないでしょうか?