2

アプリケーションを起動すると、SSL に http:// または https:// を使用してアクセスできることに気付きました。ただし、ユーザーが https のみを使用するようにしたいのですが、常に https にリダイレクトする方法はありますか?

4

4 に答える 4

2

このトピックに関するjssloyer のブログ投稿(上記の回答に要約されています) に触発されて、私はRedirecting HTTP to HTTPS with Node.js & Express on IBM Bluemixという名前の独自の投稿を書きました。ここでは、少し異なるアプローチを提供します。Express を使用してオンにし、Express フレームワークにヘッダーtrust proxyの分析を行わせます。x-forwarded-proto

GitHub には、動作するデプロイ可能なサンプルもあります。

于 2014-09-09T14:16:51.413 に答える
2

これを行うことはできますが、プログラミング言語によって異なります。以下のNode.JSに例を投稿します。基本的に必要なことは、「x-forwarded-proto」ヘッダーを確認し、それが http の場合は、https 経由でアプリケーションにリダイレクトすることです。

var middleware = module.exports,
    url = require("url");

var HTTP = "http:",
    HTTPS = "https:";

middleware.transportSecurity = function () {

    var applicationURL = "https://myapp.bluemix.net/"
        scheme = url.parse(applicationURL).protocol;

    function securityEnabled () {
        if (scheme !== HTTP && scheme !== HTTPS) {
            throw new Error(
                "The application URL scheme must be 'http' or 'https'."
            );
        }
        return scheme === HTTPS;
    }

    function redirectURL (request) {
        return url.resolve(applicationURL, request.originalUrl);
    }

    return function (request, response, next) {
        if (securityEnabled() && !request.secure) {
            response.redirect(301, redirectURL(request));
        }
        else {
            next();
        }
    };

};

app.js

...
middleware = require("./middleware"),

app.use(middleware.transportSecurity());
...

使用しているプログラミング言語を教えてください。その例も投稿できます。

于 2014-09-09T01:04:27.983 に答える
0

Bluemix プロキシー・サーバーは SSL を終了するため、すべてのトラフィックはアプリに対して HTTP のように見えます。ただし、プロキシは、値が http または https の $WSSC という名前の特別な HTTP ヘッダーも追加します。このヘッダーを確認し、値が http に設定されている場合は、ページの https バージョンにリダイレクトします。

Liberty プロファイルの実装 request.getScheme() は、この同じヘッダーをチェックするように書かれていると思います。そのため、Ram の回答はおそらく Liberty で行うのに適した方法です。

更新: X-Forwarded-Proto ヘッダーも設定されるようになりました。

詳しくは、 https://developer.ibm.com/answers/questions/8617/how-to-tell-if-my-application-was-requested-using-ssl/?community=bluemixを参照してください。

于 2014-11-13T08:31:11.320 に答える
0

私も自分のアプリに同様の疑問を抱いていました.SSL実装で正常に機能していた以下のコードを使用しました:

function sslneed(req, res, next) {
if (req.headers && req.headers.$wssc === "80") {
return res.redirect('https://' + req.get('host') + req.url);
}
next();
}
app.use(sslneed);

具体的には $WSSC を確認する必要があります。

于 2014-11-12T03:36:47.370 に答える