Ошибка 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 в целом, поэтому я, вероятно, упускаю что-то очевидное.