0

最初に少し背景を説明します。Azure Web サイトで実行されている NodeJS サーバーでは、すべての 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 Web サイトで機能させる方法を知っている人はいますか?

4

1 に答える 1

1

x-arr-ssl ヘッダーを使用してこれを検出できます。これを確認してください: https://coderead.wordpress.com/2014/09/05/redirecting-to-https-in-node-js-on-azure-ウェブサイト/

于 2014-12-13T00:31:48.053 に答える