J'ai une instance Windows ec2 sur AWS, qui répond avec une interface sur le port 80. Mon backend fonctionne sur le port 5000. Est-il possible d'héberger à la fois l'interface frontale et le backend sur le même port sans utiliser de port sur un client pour le reste API?
L'extrémité avant:
www.example.com
Backend actuel:
www.example.com:5000
Ce que j'aimerais que ce soit:
www.example.com/backend/
Comment puis-je écrire un seul fichier index.js ou server.js pour les itinéraires Backend et Frontend?
Bien sûr, il est trivial d’héberger les deux sur le même port, c’est juste une question de routage.
Par exemple, utiliser express.js
et disposer de fichiers statiques (CSS, images, HTML, etc.) dans un dossier nommé public
:
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!'))
Si vous créez un fichier public/index.html
:
<html>HI</html>
Ensuite, vous pouvez l'obtenir (le "frontend") en exécutant curl 'localhost:80/'
:
$ curl 'localhost:80/'
<html>HI</html>
$
Vous pouvez également accéder à votre "backend":
$ curl 'localhost:80/backend'
Hello World!
$
Point de terminaison de service
Le noeud final est un point de connexion où les fichiers HTML ou les pages du serveur actif sont exposés. Les points finaux fournissent les informations nécessaires pour adresser un point final de service Web. Le noeud final fournit une référence ou une spécification utilisée pour définir un groupe ou une famille de propriétés d’adressage de messages et pour donner des caractéristiques de message de bout en bout, telles que des références pour la source et la destination des noeuds finaux, ainsi que l’identité des messages permettant une application uniforme adressage de messages "indépendants". Le point final peut être un PC, un PDA ou un terminal de point de vente Référence:Définition du point de terminaison service .
www
.example.comwww
api
.example.com (Le plus utilisé)backend
.example.comVous pouvez y parvenir en utilisant un proxy inverse tel que Nginx ou en récupérant le sous-domaine à partir de l'objet de requête dans NodeJs.
Nginx est un serveur Web qui peut également être utilisé en tant que proxy inverse, équilibreur de charge et cache HTTP. Le logiciel a été créé par Igor Sysoev et publié pour la première fois en 2004. Une société du même nom a été fondée en 2011 pour fournir une assistance.
Utilisation de Nginx comme équilibreur de charge HTTP
Vous pouvez configurer Nginx pour équilibrer les requêtes adressées à votre serveur comme suit:
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;
}
}
}
Utilisez expressjs pour obtenir le sous-domaine de l’objet request.
Un tableau de sous-domaines dans le nom de domaine de la demande.
Documentation:
// Host: "tobi.ferrets.example.com"
req.subdomains
// => ["ferrets", "tobi"]
Dans votre cas, vos sous-domaines possibles sont: www
ou api
// Host: "www.example.com"
req.subdomains
// => ["www"]
Ou
// Host: "api.example.com"
req.subdomains
// => ["api"]
Voici comment vous devez traiter la demande dans votre server.js
var subDomain = req.subdomains[0];
if (subdomain === 'api') {
processBackendRequest();
} else {
processFrontendRequest();
}
Le seul moyen efficace d'éviter de spécifier un numéro de port est d'utiliser post 80 pour HTTP ou 443 pour HTTPS.
Si vous exécutez IIS, vous pouvez faire fonctionner votre site Web en tant que site Web appelé "exemple.com". Sous ce site, vous disposez d'une autre "application" appelée "backend".
Toutes les requêtes HTTP pour www.example.com iraient au site Web racine. Les demandes adressées à www.example.com/backend seraient acheminées vers l'application "backend" située sur le site Web example.com.
ServerFault est peut-être un endroit plus approprié pour poser des questions à IIS.