如何检测Azure网站上的HTTPSredirect?

根据标题,我有一个Node.js应用程序,我希望能够检测是否通过HTTPS或HTTP进行请求。 到目前为止,我的redirect如下所示:

// Ensure the page is secure, or that we are running a development build if (req.headers['x-forwarded-proto'] === 'https' || process.env.NODE_ENV === 'development') { res.render('index'); } else { winston.info('Request for login page made over HTTP, redirecting to HTTPS'); res.redirect('https://' + req.host); } 

在Nodejitsu上可以正常工作,但redirect的HTTPS请求在Azure上没有设置“x-forwarded-proto”头。

我认为我的评论是正确的:

X-ARR-SSL似乎是检查的标题。

 // Ensure the page is secure, or that we are running a development build if (req.headers['x-forwarded-proto'] === 'https' || req.headers['x-arr-ssl'] || process.env.NODE_ENV === 'development') { res.render('index'); } else { winston.info('Request for login page made over HTTP, redirecting to HTTPS'); res.redirect('https://' + req.host); } 

进入完全相同的问题,但以不同的方式解决它。 如果您使用Express并启用信任代理,则req.protocol将selectx-forwarded-proto头。 Azure不会设置x-forwarded-proto头文件,但是您可以使用x-arr-ssl头文件手动对其进行破解,以便req.protocol将在您的应用程序的其余部分中返回正确的值。

这是一个要点: https : //gist.github.com/freshlogic/6348417

 var express = require('express'); var app = express(); app.enable('trust proxy'); // HACK: Azure doesn't support X-Forwarded-Proto so we add it manually app.use(function(req, res, next) { if(req.headers['x-arr-ssl'] && !req.headers['x-forwarded-proto']) { req.headers['x-forwarded-proto'] = 'https'; } return next(); });