Как получить RequireSSL в NodeJS на веб-сайте Azure?
Итак, сначала немного предыстории: на сервере NodeJS, работающем на веб-сайте Azure, все HTTPS-запросы будут автоматически направляться на конечную точку http. Это позволяет следующему коду работать как для 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 ответ
Решение
Вы можете обнаружить это, используя заголовок x-arr-ssl. Пожалуйста, пройдите по этому адресу: https://coderead.wordpress.com/2014/09/05/redirecting-to-https-in-node-js-on-azure-websites/