AWSにec2 Windowsインスタンスがあり、ポート80のフロントエンドで応答します。バックエンドはポート5000で実行しています。残りのクライアントのポートを使用せずに、同じポートでフロントエンドとバックエンドの両方をホストできる方法はありますか? API?
フロントエンド:
www.example.com
現在のバックエンド:
www.example.com:5000
私がそれを望んでいるもの:
www.example.com/backend/
バックエンドルートとフロントエンドルートの両方に単一のindex.jsまたはserver.jsファイルを書き込むにはどうすればよいですか?
確かに、同じポートで両方をホストするのは簡単です。ルーティングの問題です。
たとえば、express.js
を使用し、public
という名前のフォルダーに静的ファイル(CSS、画像、HTMLなど)があるとします。
const express = require('express')
const app = express()
app.use('/', express.static('public'))
app.get('/backend', (req, res) => res.send('Hello World!'))
app.listen(80, () => console.log('Example app listening on port 80!'))
ファイルを作成する場合public/index.html
:
<html>HI</html>
次に、curl 'localhost:80/'
を実行して、それ(「フロントエンド」)を取得できます。
$ curl 'localhost:80/'
<html>HI</html>
$
「バックエンド」にアクセスすることもできます。
$ curl 'localhost:80/backend'
Hello World!
$
サービスエンドポイント
エンドポイントは、HTMLファイルまたはアクティブなサーバーページが公開される接続ポイントです。エンドポイントは、Webサービスエンドポイントのアドレス指定に必要な情報を提供します。エンドポイントは、メッセージアドレッシングプロパティのグループまたはファミリを定義するために使用される参照または仕様を提供し、エンドポイントの送信元および宛先の参照などのエンドツーエンドのメッセージ特性を提供し、メッセージのアイデンティティを統一して「独立した」メッセージのアドレス指定。エンドポイントは、PC、PDA、またはPOS端末にすることができますリファレンス:サービスエンドポイントの定義 。
www
.example.comwww
にリダイレクトする必要がありますapi
.example.com(最も使用されている)backend
.example.comNginx のようなリバースプロキシを使用するか、NodeJのリクエストオブジェクトからサブドメインを取得することで、これを実現できます。
Nginxは、リバースプロキシ、ロードバランサー、およびHTTPキャッシュとしても使用できるWebサーバーです。このソフトウェアは、Igor Sysoevによって作成され、2004年に最初に公開されました。同じ名前の会社がサポートを提供するために2011年に設立されました。
次のように、サーバーへのリクエストのバランスをとるようにNginxを設定できます:
http {
upstream backend {
server localhost:5000;
}
upstream frontend {
server localhost;
}
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://backend;
}
}
server {
listen 80;
server_name www.example.com example.com;
location / {
proxy_pass http://frontend;
}
}
}
expressjs を使用して、リクエストオブジェクトからサブドメインを取得します。
リクエストのドメイン名に含まれるサブドメインの配列。
ドキュメント:
// Host: "tobi.ferrets.example.com"
req.subdomains
// => ["ferrets", "tobi"]
あなたの場合、可能なサブドメインは次のとおりです:www
またはapi
// Host: "www.example.com"
req.subdomains
// => ["www"]
または
// Host: "api.example.com"
req.subdomains
// => ["api"]
これは、server.js
内でリクエストを処理する方法です
var subDomain = req.subdomains[0];
if (subdomain === 'api') {
processBackendRequest();
} else {
processFrontendRequest();
}
ポート番号を指定する必要がない唯一の実際の方法は、HTTPの場合はポスト80、HTTPSの場合は443を使用することです。
IIS=を実行している場合は、フロントエンドを「example.com」というWebサイトとして実行し、そのWebサイトの下に「バックエンド」という別の「アプリケーション」を置くことができます。
Www.example.comに対するすべてのHTTPリクエストは、ルートWebサイトに送信されます。 www.example.com/backendへのリクエストは、example.com Webサイトの下の「バックエンド」アプリケーションにルーティングされます。
ServerFaultは、IISの質問をするのにより適切な場所です。