106 votes

Comment héberger plusieurs sites Node.js sur la même IP/serveur avec différents domaines?

J'ai un serveur linux avec une seule IP liée à celui-ci. Je veux héberger plusieurs sites Node.js sur ce serveur sur cette IP, chacun (évidemment) avec un domaine ou un sous-domaine unique. Je veux qu'ils soient tous sur le port 80.

Quelles sont mes options pour le faire ?

Une solution évidente semble être d'avoir tous les domaines desservis par une application web node.js qui agit comme un proxy et effectue un transfert vers les autres applications node.js s'exécutant sur des ports uniques.

2voto

Joe Blow Points 3618

Sur la base de @Michaaatje et @papiro, voici une manière très simple :

Supposons que vous avez des pages typiques telles que...

var app = express()
app.use(sess)
app.use(passport.initialize())
app.use(passport.session())
app.use('/static', express.static('static'))

app.get('/', ensureLoggedIn("/loginpage"), function(req, res, next) {
    ...
})

app.get('/sales', ensureLoggedIn("/loginpage"), function(req, res, next) {
    ...
})

app.get('/about', ensureLoggedIn("/loginpage"), function(req, res, next) {
    ...
})

app.post('/order', ensureLoggedIn("/loginpage"), urlencodedParser, (req, res) => {
    ...
})

... et ainsi de suite.

Supposons que le domaine principal soit "abc.test.com"

Mais vous avez un domaine "alternatif" (peut-être pour les clients) qui est "customers.test.com".

Il suffit d'ajouter ceci...

var app = express()
app.use(sess)
app.use(passport.initialize())
app.use(passport.session())
app.use('/static', express.static('static'))

app.use((req, res, next) => {
    req.isCustomer = false
    if (req.headers.host == "customers.test.com") {
        req.isCustomer = true
    }
    next();
})

et ensuite c'est aussi simple que ça...

app.get('/', ensureLoggedIn("/loginpage"), function(req, res, next) {
    if (req.isCustomer) {
        .. page spéciale ou autre ..
        return
    }
    ...
})

app.get('/sales', ensureLoggedIn("/loginpage"), function(req, res, next) {
    if (req.isCustomer) {
        res.redirect('/') .. par exemple
        return
    }
    ...
})

app.get('/about', ensureLoggedIn("/loginpage"), function(req, res, next) {
    if (req.isCustomer) { ... }
    ...
})

app.post('/order', ensureLoggedIn("/loginpage"), urlencodedParser, (req, res) => {
    if (req.isCustomer) { ... }
    ...
})

Merci à @Michaaatje et @papiro.

0voto

Isaac Pak Points 855

Ce guide de Digital Ocean est excellent. Il utilise le module pm2 qui transforme votre application en daemon (les exécute en tant que service). Pas besoin de modules supplémentaires comme Forever, car il redémarrera automatiquement votre application en cas de crash. Il offre de nombreuses fonctionnalités qui vous aident à surveiller les différentes applications s'exécutant sur votre serveur. C'est vraiment génial!

0voto

Zijian Zhang Points 1

Cela peut être fait super facilement par redbird. Supposons que vous avez deux noms de domaine example.com et example1.com et deux sites web servant sur le port 8000 et 8001.

Vous pouvez configurer un proxy inverse vers les deux sites web en utilisant les scripts suivants.

var proxy = require('redbird')({port: 80});
proxy.register("example.com", "http://localhost:8000");
proxy.register("example1.com", "http://localhost:8001");

Vous pouvez utiliser un outil de gestion des processus comme pm2 pour exécuter les scripts de sorte qu'ils continueront à fonctionner après avoir fermé votre shell.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X