Reindirizzamento da HTTP a HTTPS in Node.js utilizzando Express

Autore:Esadax
Aggiornato:29 mag 2025

Per garantire che tutto il traffico HTTP venga reindirizzato a HTTPS, possiamo utilizzare il middleware Express.js insieme ai moduli http e https. Questa configurazione reindirizzerà automaticamente tutte le richieste HTTP in arrivo a HTTPS consentendo alle richieste HTTPS di passare normalmente.

Ecco come puoi implementarlo passo dopo passo:

  1. Configura l'app Express: crea un'istanza di Express.js per gestire la logica del server.

  2. Definisci middleware per il reindirizzamento da HTTP a HTTPS: utilizza il middleware Express per controllare il protocollo di ogni richiesta in arrivo. Se è HTTP, reindirizzalo a HTTPS.

  3. Definisci i tuoi percorsi: specifica quali URL devono rispondere con un messaggio o gestire altri tipi di traffico.

  4. Crea un server HTTP: utilizza il modulo http per creare un server in ascolto sulla porta 3000 e delegare le richieste alla tua app Express.

  5. Crea un server HTTPS: utilizza il modulo https per creare un altro server che ascolti sulla stessa porta (o su una diversa, se necessario) e deleghi anche le richieste alla tua app Express.

  6. Avvia entrambi i server: avvia entrambi i server in modo che possano gestire le connessioni in entrata.

Ecco il codice completo:

const express = require('express');
const https = require('https');
const http = require('http');

const app = express();

// Redirect HTTP to HTTPS
app.use((req, res, next) => {
    if (req.protocol === 'http') {
        return res.redirect(`https://${req.hostname}${req.path}`);
    }
    next();
});

// Define routes for HTTPS traffic
app.get('/', (req, res) => {
    res.send('HTTPS is working!');
});

// Create HTTP server
const httpServer = http.createServer((req, res) => {
    app(req, res, next => {
        // Middleware has already been applied here
        // No need to call next() again as middleware handles it
    });
}).listen(3000);

// Create HTTPS server
const httpsServer = https.createServer({ server: app }).listen(3000);

// Start both servers
httpServer.listen(3000);
httpsServer.listen(3000);

Spiegazione del Codice:

  • Express App Setup: creiamo un'app Express utilizzando express() e definiamo il suo middleware e i percorsi all'interno di questa istanza.

  • Middleware per il reindirizzamento: La funzione middleware controlla se il protocollo della richiesta è HTTP. In tal caso, reindirizza il client allo stesso percorso, ma tramite HTTPS.

  • Definizione del percorso: Definiamo un percorso GET per l'URL principale (/) che risponde con "HTTPS is working!" quando si accede tramite HTTPS.

  • Creazione Server HTTP: Utilizzando http.createServer(), creiamo un server HTTP in ascolto sulla porta 3000. Questo server delega ogni richiesta all'app Express, consentendo al middleware e alle route di elaborarla.

  • Creazione server HTTPS: Allo stesso modo, https.createServer() crea un server HTTPS configurato con un certificato (supponendo che uno sia già impostato). È anche in ascolto sulla porta 3000 e delega le richieste all'app Express.

  • Avvio dei server: entrambi i server vengono avviati utilizzando listen(), assicurando che possano gestire le connessioni in entrata ed elaborare correttamente le richieste.