如何在Azure网站上获得NodeJS中的RequireSSL?

时间:2014-12-12 23:12:46

标签: node.js azure azure-web-sites requiressl

首先是一个小背景:在Azure网站中运行的NodeJS服务器将自动拥有所有HTTPS请求directed to the http endpoint。这允许以下代码适用于HTTP和HTTPS

var http = require('http');
var express = require('express');

var app = express();
// *snip*
http.createServer(app).listen(process.env.PORT);
// can go to http://*.azurewebsites.net or https://*.azurewebsites.net without issue

从这里开始我决定创建一个“RequireSSL”中间件

/* snip */
if (req.protocol === 'http') {
    var origFullUrl: string = 'http://' + req.get('host') + req.originalUrl;
    var u: url.Url = url.parse(origFullUrl, true);
    u.host = null; // nead to clear so 'port' is used
    u.protocol = 'https';
    u.port = '443';

    res.redirect(url.format(u));
}
/* snip */

这是背景发挥作用的地方。由于Azure将所有HTTPS重定向到HTTP协议,因此req.protocol 总是等于'http'创建重定向循环。

任何人都知道如何在Azure网站中使用它?

1 个答案:

答案 0 :(得分:1)

您可以使用x-arr-ssl标头检测到这一点..请仔细阅读:https://coderead.wordpress.com/2014/09/05/redirecting-to-https-in-node-js-on-azure-websites/