Last active
July 10, 2019 09:45
-
-
Save genesisneo/63cfa016c70e63bf69e578d167857761 to your computer and use it in GitHub Desktop.
Express server with http to https redirection for production.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const fs = require('fs'); | |
const path = require('path'); | |
const spdy = require('spdy'); | |
const helmet = require('helmet'); | |
const express = require('express'); | |
const compression = require('compression'); | |
const server = express(); | |
const { NODE_ENV } = process.env; | |
const isDev = NODE_ENV === 'development'; | |
// security config | |
server.enable('trust proxy'); | |
server.use(compression({ | |
level: 9, | |
memLevel: 9 | |
})); | |
server.use(helmet.frameguard()); | |
server.use(helmet.xssFilter({ setOnOldIE: true })); | |
server.use(helmet.hidePoweredBy()); | |
server.use(helmet.hsts({ force: true })); | |
server.use(helmet.ieNoOpen()); | |
server.use(helmet.noSniff()); | |
if (!isDev) { | |
// redirect http to https for domain | |
server.use((req, res, next) => { | |
const { | |
protocol, | |
url, | |
headers: { | |
host | |
} | |
} = req; | |
if (!/https/.test(protocol)) { | |
res.redirect(301, `https://${host}${url}`); | |
} else { | |
next(); | |
} | |
}); | |
server.use(express.static(path.join(__dirname, 'build'))); | |
server.use(express.static(path.join(__dirname, 'static'))); | |
server.get('/*', (req, res) => { | |
res.sendFile(path.join(__dirname, 'build', 'index.html')); | |
}); | |
// serving hhtps port 443 through http2 | |
spdy.createServer({ | |
key: fs.readFileSync('./ssl.key'), | |
cert: fs.readFileSync('./ssl.crt'), | |
ca: fs.readFileSync('./ssl.pem'), | |
}, server) | |
.listen(8181, () => { | |
console.log(`Server is running at port ${8181} for HTTPS`); | |
}); | |
} | |
// serving http port 80 | |
server.listen(8080, () => { | |
console.log(`Server is running at port ${8080} for HTTP`); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment