2014-12-12 50 views
0

所以先介紹一下背景:在Azure網站中運行的NodeJS服務器將自動擁有所有HTTPS請求directed to the http endpoint。這讓下面的代碼爲兩個HTTP和HTTPS如何在Azure網站的NodeJS中獲得RequireSSL?

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網站上運行?

回答