Ошибка Heroku H13 на сервере HTTPS узла ExpressJS

Я пытаюсь реализовать HTTPS на моем сервере Node.js (среда Expressjs). У меня есть подписанный сертификат и ключ, а также самозаверяющий сертификат / ключ для тестирования / разработки:

if(process.env.NODE_ENV == 'production'){
  var app = module.exports = express.createServer({
    key: fs.readFileSync('./ssl/nopass_server.key'),
    cert: fs.readFileSync('./ssl/server.crt')
  });
} else {
  var app = module.exports = express.createServer({
    key: fs.readFileSync('./ssl/self_signed/nopass_server.key'),
    cert: fs.readFileSync('./ssl/self_signed/server.crt')
  });
}

Я также настроил конечную точку SSL на Heroku. Все отлично работает наlocalhostи Endpoint, кажется, работает правильно, но когда я запускаю приложение в рабочей среде (на Heroku), я получаю ошибку приложения H13. Интересно (или нет), если я скажу Express, чтобы вместо этого создать HTTP-сервер:var app = module.exports = express.createServer() это работает, но потом Chrome жалуется, чтоthe page at https://mydomain.com ran insecure content from http://mydomain.com.

Могу ли я не создавать или не создавать HTTPS-сервер в экспресс для производства? Если мне нужно, есть ли что-то еще, что мне нужно, чтобы оно работало на Heroku (например, я доверяю этому, чтобы установить правильный порт сvar port = process.env.PORT)? Если нет, то как я могу подать «Безопасный»? содержание, если на нем не запущен сервер https, поэтому браузеры не будут жаловаться?

Я использую следующее, чтобы позаботиться о любых не-https запросах:

app.get('*',function(req,res,next){
  if(req.headers['x-forwarded-proto'] != 'https'){
    res.redirect('https://mydomain.com'+req.url);
  } else next();
});

Это в настоящее время находится чуть выше остальных моих маршрутов, может ли это быть проблемой / это должно быть где-то еще?

У меня очень ограниченный опыт работы с https в целом, поэтому я, вероятно, упускаю что-то очевидное.

Ответы на вопрос(2)

Ваш ответ на вопрос