https направляет к узлу JS производства - PullRequest
0 голосов
/ 20 января 2019

У меня есть приложение на nodejs, работающее на хосте kinghost.com, оно включило SSL, мы зашифруем, но мое приложение все еще не отвечает https только по http. Я сделал этот параметр ниже в приложении, чтобы запросы были преобразованы в https, но он не работал. Может ли кто-нибудь сказать мне, что делать, где я не прав, какой-то пример. Я не знаю, что еще делать.

Файл app.js

app.set('port', process.env.PORT || 21019);
app.listen(app.get('port')); 

app.use(function(req, res, next) {
    if ((req.get('X-Forwarded-Proto') !== 'https')) {
        res.redirect('https://' + req.get('Host') + req.url);
    } else
    next();
});

Полный файл app.js

var express           = require('express');
var session           = require('express-session');
var cookieParser      = require('cookie-parser');
var bodyParser        = require('body-parser');
var logger            = require('morgan');
var path              = require('path');
var fileUpload        = require('express-fileupload');

var https             = require('https');

var app               = express();
var expressValidator  = require('express-validator');
var passport          = require('passport');
var flash             = require('connect-flash');

// - Cria rotas
var routes            = require('./routes/index');
var usuarios          = require('./routes/usuario');
var motorista         = require('./routes/motorista');
var login             = require('./routes/login');
var aluno             = require('./routes/aluno');
var contrato          = require('./routes/contrato');
var boleto            = require('./routes/boleto');
var pessoa            = require('./routes/pessoa');

require('./security/autenticacao')(passport);

app.use(logger('dev'));
app.use(expressValidator());
app.use(cookieParser());
app.use(bodyParser.json({limit: "50mb"}));
app.use(bodyParser.urlencoded({limit: "50mb", extended: true, parameterLimit:50000}));
app.use(express.static(path.join(__dirname, 'public')));
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(session({
    secret: 'reis&turlwaysrunning',
    resave: true,
    saveUninitialized: true
 } ));
app.use(logErrors);
app.use(passport.initialize());
app.use(passport.session());
app.use(flash());
app.use(function (req, res, next) {
    res.locals.login = req.user;
    next();
});
app.use(fileUpload());

app.set('port', process.env.PORT || 21019);
app.listen(app.get('port')); 

app.use(function(req, res, next) {
    if ((req.get('X-Forwarded-Proto') !== 'https')) {
        res.redirect('https://' + req.get('Host') + req.url);
    } else
    next();
});

// Atriui rotas
app.use('/home', routes);
app.use('/usuarios', usuarios);
app.use('/alunos', aluno);
app.use('/motoristas', motorista);
app.use('/contratos', contrato);
app.use('/login', login);
app.use('/boletos', boleto);
app.use('/pessoas', pessoa);

//app.listen(port);

function logErrors (err, req, res, next) {
    console.error('Troxa: ' + err.stack)
    next(err)
  }

module.exports = app;

Я тоже пытался, и это не сработало

Файл app.js

https.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.write('Hello World!');
    res.end();
  }).listen(21019);

Полный файл app.js

    var express           = require('express');
    var session           = require('express-session');
    var cookieParser      = require('cookie-parser');
    var bodyParser        = require('body-parser');
    var logger            = require('morgan');
    var path              = require('path');
    var fileUpload        = require('express-fileupload');

    var https             = require('https');

    var app               = express();
    var expressValidator  = require('express-validator');
    var passport          = require('passport');
    var flash             = require('connect-flash');

    // - Cria rotas
    var routes            = require('./routes/index');
    var usuarios          = require('./routes/usuario');
    var motorista         = require('./routes/motorista');
    var login             = require('./routes/login');
    var aluno             = require('./routes/aluno');
    var contrato          = require('./routes/contrato');
    var boleto            = require('./routes/boleto');
    var pessoa            = require('./routes/pessoa');

    require('./security/autenticacao')(passport);

    app.use(logger('dev'));
    app.use(expressValidator());
    app.use(cookieParser());
    app.use(bodyParser.json({limit: "50mb"}));
    app.use(bodyParser.urlencoded({limit: "50mb", extended: true, parameterLimit:50000}));
    app.use(express.static(path.join(__dirname, 'public')));
    app.set('views', path.join(__dirname, 'views'));
    app.set('view engine', 'ejs');
    app.use(session({
        secret: 'reis&turlwaysrunning',
        resave: true,
        saveUninitialized: true
     } ));
    app.use(logErrors);
    app.use(passport.initialize());
    app.use(passport.session());
    app.use(flash());
    app.use(function (req, res, next) {
        res.locals.login = req.user;
        next();
    });
    app.use(fileUpload());

    https.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.write('Hello World!');
    res.end();
  }).listen(21019);

    // Atriui rotas
    app.use('/home', routes);
    app.use('/usuarios', usuarios);
    app.use('/alunos', aluno);
    app.use('/motoristas', motorista);
    app.use('/contratos', contrato);
    app.use('/login', login);
    app.use('/boletos', boleto);
    app.use('/pessoas', pessoa);

    //app.listen(port);

    function logErrors (err, req, res, next) {
        console.error('Troxa: ' + err.stack)
        next(err)
      }

Ответы [ 3 ]

0 голосов
/ 20 января 2019

Для использования https вам необходимо иметь учетные данные https (т. Е. Сертификат и ключ). Вы можете использовать это для генерации учетных данных

openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout key.pem -out cert.pem

var fs = require('fs');
var https = require('https');

var httpsServerOptions = {
  'key': fs.readFileSync('./https/key.pem'),
  'cert': fs.readFileSync('./https/cert.pem')
};


var express = require('express');
var app = express();

// your express configuration here


var httpsServer = https.createServer(httpsServerOptions, app);


httpsServer.listen(21019);
0 голосов
/ 20 апреля 2019

Если вам достаточно бесплатных сертификатов Let's Encrypt, вы можете использовать Greenlock и получить бесплатный SSL с автоматическим обновлением.

Greenlock: бесплатный SSL, автоматический HTTPS

Greenlock обрабатывает выдачу и продление сертификата (через Let's Encrypt) и перенаправление http => https, из коробки.

Вместо вызова .listen() из экспресса вы просто экспортируете свое экспресс-приложение (или любое другое).совместимая с node-http функция).

Упрощенно, это выглядит так:

express-app.js:

var express = require('express');
var app = express();

app.use('/', function (req, res) {
  res.send({ msg: "Hello, Encrypted World!" })
});

// DO NOT DO app.listen()
// Instead export your app:
module.exports = app;

Затем вы можете использовать http и https узла для вашего сервераили вы можете использовать Greenlock Express, который настраивает его для вас:

server.js:

require('greenlock-express').create({
  // Let's Encrypt v2 is ACME draft 11
  version: 'draft-11'
, server: 'https://acme-v02.api.letsencrypt.org/directory'

  // You MUST change these to valid email and domains
, email: 'john.doe@example.com'
, approveDomains: [ 'example.com', 'www.example.com' ]
, agreeTos: true

  // This should be the directory to which certificates are saved
, configDir: "/path/to/project/acme/"

, app: require('./express-app.js')

, communityMember: true // Get notified of important updates
, telemetry: true       // Contribute telemetry data to the project
}).listen(80, 443);

Screencast

Смотреть демонстрацию QuickStart: https://youtu.be/e8vaR4CEZ5s

Подробнее

См. https://stackoverflow.com/a/51146209/151312

0 голосов
/ 20 января 2019

Вы можете попробовать метод реализации https с помощью express, как показано здесь Включение HTTPS для express.js ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...