强制我的heroku应用程序使用SSL(https)
我有一个节点应用程序在Heroku上成功运行。我购买了一个加急SSL证书,一切正常。我去https。。。并获得一个完整的“绿条”,证明该网站是通过https提供服务的强制我的heroku应用程序使用SSL(https),heroku,https,Heroku,Https,我有一个节点应用程序在Heroku上成功运行。我购买了一个加急SSL证书,一切正常。我去https。。。并获得一个完整的“绿条”,证明该网站是通过https提供服务的 但是,非SSL标准http仍然可用。如何强制应用程序通过https提供服务?谢谢如果请求来自HTTP,您需要向Node.js应用程序添加代码,将请求重定向到HTTPS版本 根据您使用的框架或工具,想法很简单: 检查请求方案 如果是http,则重定向到https,并传递相同的请求uri和查询 在Heroku上,确定请求是通过htt
但是,非SSL标准http仍然可用。如何强制应用程序通过https提供服务?谢谢如果请求来自HTTP,您需要向Node.js应用程序添加代码,将请求重定向到HTTPS版本 根据您使用的框架或工具,想法很简单:
- 检查请求方案
- 如果是http,则重定向到https,并传递相同的请求uri和查询
这篇文章让我大吃一惊还有一个NPM模块帮助您处理它您也可以在基础架构层将HTTP请求重定向到HTTPS,无需更改您的应用程序 提供了“将HTTP重定向到HTTPS”选项 它将AWS CloudFront CDN放在处理重定向的应用程序前面
Heroku路由器没有这一功能。对于任何一个来到这篇文章的人来说,我遇到了这个问题,发现我的代码顺序是这样的,这把事情搞砸了:
app.use(express.static('build'));
app.use((req, res, next) => {
if (req.header('x-forwarded-proto') !== 'https') {
res.redirect(`https://${req.header('host')}${req.url}`)
} else {
next();
}
});
一旦我把express.static(“build”)移到send app.use方法下面,一切都正常了 如果您正在开发一个
create-react-app
并且碰巧使用create-react-app-buildpack
部署到Heroku(我很懒…)
您可以在static.json
文件中指定以下内容
{
"https_only": true
}
自2019年7月起,Heroku支持HTTPS重定向到其他域或子域(重定向不能指向自身)。您所要做的就是为您的域配置URL记录,如中所述。可以找到完整的公告。这就是我们在Heroku上将http重定向到https的方式(我们有100多个域指向同一个站点,有些域不在SSL上,因此在这种情况下也会对这些域进行测试。如果不需要,请不要包括域行): 在这方面可能有改进的余地,但它对我们来说非常有效 在这个块之后,我们有更多的行以其他方式重定向,因此我们在这一点上不使用L标志。我只是使用fromCloudFlare。只需遵循以下步骤: 1.在Cloudflare上,如果您还没有 2.添加您的站点
example.com
3.选择一个计划。(免费计划就足够了)
4.查看您的DNS记录。例如,如果您在namescape上已经有一些条目,Cloudflare会尝试自动检测这些记录。重要的是,您至少要留下带有IPv4
地址的类型A记录,以及CNAME
类型,其中内容是应用程序Heroku设置中域名的DNS目标。另请参见屏幕截图
5.您需要指向Cloudflare的名称服务器以成功激活您的站点,否则Cloudflare无法管理您的DNS并优化您的站点。删除现有名称服务器,然后用Cloudflare的名称服务器替换它们。他们还会在页面上向您显示说明(可能需要48小时,直到您的站点处于活动状态,但根据我的经验,这只需要15分钟)。请参见带有namescape的屏幕截图作为示例:
6.转到SSL/TLS
部分,并在边缘证书部分下启用“始终使用HTTPS”功能。现在,所有方案为“http”的请求都应该重定向到“https”
奖励1:如果用户只输入example.com
或www.example.com
只需创建一个页面规则,将这些请求转发到您的安全url,则也可转发不带方案或www的请求。为此,请转到“页面规则”部分并点击“创建页面规则”按钮。输入应匹配的url,并添加设置转发url
,状态代码为301-永久重定向
。在末尾输入目标url,如下所示,$1
,以使其正常工作。点击“保存并部署”,您就可以开始了。有关更多详细信息,请查看“高级转发选项”部分(请记住,您可能需要清除缓存以查看更改)。请参见屏幕截图:
奖励2:您购买了另一个域,只想将其重定向到您的安全主域。例如,您购买了fiveexample.com
和5example.com
,并且希望将5example.com
始终重定向到https://www.fiveexample.com
无论用户输入关于5example.com
的内容,例如www.5example.com
,http://5example.com
甚至https://www.5example.com
即使您的第二个域没有ssl。Cloudflares页面规则在这里也是一个解决方案。只需为第二个域执行步骤1-5(但在步骤4,您不需要heroku dns目标)。按照支持所有转发的步骤为第二个域添加这三个页面规则。同样适用于.app
域(请记住,您可能需要清除缓存才能看到更改)。见截图
使用nodejs和express:
const app = express();
app.enable('trust proxy');
app.use(function (req, res, next) {
if (req.secure) {
next();
} else {
res.redirect('https://' + req.headers.host + req.url);
}
});
2019年,这款手机像一个魔咒一样工作,Heroku上的Create React应用程序和GoDaddy的域名都出现了这个问题。服务于构建的express服务器需要这个。仍然像charm 2021Bro一样工作,您真是太棒了!这是最好的解决方案兄弟,我已经连续四个月想弄明白了,你是上帝,我欠你的
const app = express();
app.enable('trust proxy');
app.use(function (req, res, next) {
if (req.secure) {
next();
} else {
res.redirect('https://' + req.headers.host + req.url);
}
});