如何在Heroku上的Node.js应用程序上实施SSL?

nbewdwxp  于 2022-11-13  发布在  Node.js
关注(0)|答案(2)|浏览(145)

我尝试使用express在Heroku上部署一个Node.js应用程序,但是我很难对所有传入的流量强制使用HTTPS。我使用express-sslify库来实现这一点,使用下面的代码,它与express-sslify文档相同,但是网站仍然接受非HTTPS流量。如果您有任何关于如何纠正和/或使用替代中间件的建议,我们将不胜感激!
服务器. js文件

var history = require('connect-history-api-fallback');
var enforce = require('express-sslify');
var http = require('http');

var express = require('express');
var serveStatic = require("serve-static")
var path = require('path');
var app = express();
app.use(enforce.HTTPS({ trustProtoHeader: true }));
app.use(serveStatic(path.join(__dirname, 'dist')));
app.use(history());
const port = process.env.PORT || 80;
http.createServer(app).listen(port)
nfzehxib

nfzehxib1#

另一种方法是例如这个包:https://www.npmjs.com/package/express-sslify
您只需编写import和一行代码。

const enforce = require('express-sslify');

app.use(enforce.HTTPS({ trustProtoHeader: true }));

有一点很重要,它需要放在所有自定义终结点之前,放在自定义终结点之后可能会阻止它工作。

9rnv2umw

9rnv2umw2#

请阅读本文了解Heroku标题https://devcenter.heroku.com/articles/http-routing#heroku-headers
Git网址:https://github.com/cmdr-dhiraj-laddha/heroku_force_ssl
下面的代码可以帮助您强制使用SSL

const express = require('express')
const app = express()
const port = process.env.PORT || 5003;

const env = process.env.NODE_ENV || 'development';

var forceSsl = function (req, res, next) {
 if (req.headers['x-forwarded-proto'] !== 'https') {
     return res.redirect(['https://', req.get('Host'), req.url].join(''));
 }
 return next();
};

 if (env === 'production') {
     app.use(forceSsl);
 }

app.get('/', (req, res) => {
  res.send('Hello World! - '+env)
})

app.listen(port, () => {
  console.log(`Example app listening on port ${port}`)
})

相关问题