EMPTY_RESPONSE при попытке принудительно установить https в приложении узла express - PullRequest
0 голосов
/ 12 апреля 2020

Что я делаю не так?

У меня есть приложение узла / 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')
})
...