こんちゃ洋梨🍐です。
Node.jsでAPIサーバーを作ったりすると「どこに置くか」といった課題が出てくると思います。
そしておそらく多くが選択するのは「VPS」などを借りて環境を構築し、VPSでNode.jsをホスティング、公開するといった方法なのではないでしょうか?
では今回はそんなVPSでホスティングするとき出てくる課題を解決していきます。
※ちなみに自分的に安くておススメなVPSはVPSCloudです☻(アフィリエイトリンクじゃないよ☻)
.
VPSで複数のNode.js(API)をホスティングする
作ったAPIが一つならサーバーにNode.jsをインストールして実行。それで終わりですが、複数のAPI・アプリなど開発していくとこんなこと思ったことありませんか?
「1台のVPS(PC)で複数のNode.jsで作ったAPIをホスティングしたい」
これはまぁまぁあるパターンなのではないでしょうか?(VPSの費用をケチってるだけ?w)
VPSで複数のAPIを受け付ける
では複数のAPIを受け付けるにはまずどうすればいいでしょうか。おそらく考えられるのが
・異なるポートで待機する
・コードを書き直して一つにまとめる。
とかではないでしょうか?しかしこれらは、
・ドメインの後にポート番号入れるのはやだ。
・ポート番号をウェルノンポート(80、443)以外にすると環境によってはアクセスできない。
・コードを書き換えるのはめんどくさい(そもそも趣旨と違う)
といった問題が発生します。
ではどうしたらいいでしょうか?
URLのパスによってポートを振り分ける
ここで提案するのがApacheと組み合わせて、
「アクセスしてきたパスによってポートを振り分ける」
という方法です。つまりサーバーのドメイン(IPアドレス)をexample.comとすると、
・http://example.com/aaa/ → ポート3000で待機するAPI(A)
・http://example.com/bbb/ → ポート4000で待機するAPI(B)
・http://example.com/ccc/ → ポート5000で待機するAPI(C)
といった風に振り分けることで一つのサーバー・ドメインで複数のNode.jsアプリ(API)にアクセスすることが出来るようになります。
更に(おそらく)SSLの設定も楽になります☻
振り分ける方法
さてやり方ですが、いたって簡単。「リバースプロキシ」を使います。
Apacheのhttpd.confに以下を追加します。
#あくまで例です。詳しくは「リバースプロキシ」等で検索(-v-)
SSLProxyEngine On
ProxyRequests Off
<Location /aaa>
ProxyPass http://localhost:3000/
</Location>
<Location /bbb>
ProxyPass http://localhost:4000/
</Location>
<Location /ccc>
ProxyPass http://localhost:5000/
</Location>
たったこれだけです。
これでhttp://example.com/aaa/にアクセスしてきたリクエストはポート3000で待機しているアプリのリクエストとして処理できるようになります。
おつかれさまでした👼
※ちなみに503エラーが出るときはproxy_moduleが読み込まれていないからの可能性があります。
「LoadModule proxy_module modules/mod_proxy.so」が書き込まれているか、コメントアウトされていないか確認してみてくださいね。
👼👼👼ここまで読んでくれてありがとう!👼👼👼
ホームページでは他にも
・様々な記事や作った作品および過程
・ソースコード、素材ファイル
・あらゆる”モノ”の作り方
などなど随時、記事や作品を新規公開・更新していますので是非見ていってくださいね!見ていただけると本当に嬉しいです!