Что я делаю не так?
У меня есть приложение узла / express (v10.19 / v4.17), прекрасно работающее на порте 443 (на Azure Ubuntu 16 VM), но мне нужно перенаправить все запросы на порт 80 - какими бы они ни были - на 443 (так как браузеры не приводят вас к 443 по умолчанию, когда вы просто набираете домен-как "website.com" -).
Итак, я попробовал много express модулей, чтобы выполнить работу, но всегда получал ERR_EMPTY_RESPONSE в браузере.
Как я могу отладить это? или возможно исправить в коде?
Это мой /server/index.js:
const fs = require('fs')
const https = require('https')
const http = require('http')
const express = require('express')
//var secure = require('ssl-express-www');
const logger = require('./logger')
const argv = require('minimist')(process.argv.slice(2))
const setup = require('./middlewares/frontendMiddleware')
const resolve = require('path').resolve
const app = express()
var secure = require('express-force-https');
app.use(secure);
setup(app, {
outputPath: resolve(process.cwd(), 'build'),
publicPath: '/'
})
const port = Number(process.env.PORT) || 80;
app.use(function(req,res,next) {
if(req.headers["x-forwarded-proto"] == "http") {
console.log("HTTP call detected, not allowed");
return res.redirect('https://' + req.hostname + req.path);
} else {
console.log("HTTPs call detected, allowed");
return next();
}
});
app.listen(port, () => {
console.log(`${port} we have liftoff \u{1F680}`)
});
https.createServer({
key: fs.readFileSync('/etc/letsencrypt/live/xxx.yyy/privkey.pem'),
cert: fs.readFileSync('/etc/letsencrypt/live/xxx.yyy/cert.pem'),
ca: fs.readFileSync('/etc/letsencrypt/live/xxx.yyy/chain.pem')
}, app).listen(443, () => {
console.log('Listening on 443')
})
РЕДАКТИРОВАТЬ:
С этим кодом я получаю слишком много перенаправлений , так что я вернулся к старой версии, которая не имеет кода перенаправления. Но все же мне нужна помощь, чтобы перенаправить http traffi c. Вот /server/index.js:
/* eslint consistent-return:0 */
const fs = require('fs')
const https = require('https')
const http = require('http')
const express = require('express')
//var secure = require('ssl-express-www');
const logger = require('./logger')
const argv = require('minimist')(process.argv.slice(2))
const setup = require('./middlewares/frontendMiddleware')
const resolve = require('path').resolve
const app = express()
setup(app, {
outputPath: resolve(process.cwd(), 'build'),
publicPath: '/'
})
https.createServer({
key: fs.readFileSync('/etc/letsencrypt/live/xxxyyy/privkey.pem'),
cert: fs.readFileSync('/etc/letsencrypt/live/xxxyyy/cert.pem'),
ca: fs.readFileSync('/etc/letsencrypt/live/xxxyyy/chain.pem')
}, app).listen(443, () => {
console.log('Servidor escuchando en 443')
})