2016-03-22 14 views
0

NodeJSアプリケーションでhttps URLを使用するように強制するにはどうすればよいですか?私はコードとオプションを知っています。私の問題は、ちょうどhttp(デスクトップ)に行くといくつかのコンテンツがロードされますが、そうではないはずですが、モバイル上でhttpに行くと、ロードされずにhttpsに転送されません。NodeJS/BluemixでのSSLの強制

このように - 私の質問:

私は、何のHTTPをサーバーにHTTPSを作成していない場合は - 私はなぜそれも非HTTPSコードをロードしています...か、なぜそれがhttpsに転送していないか分かりませんか?

https.createServer(options, app).listen(8000); 

任意のアイデア?

答えて

2

申し訳ありません。私はhttp://www.tonyerwin.com/2014/09/redirecting-http-to-https-with-nodejs.htmlを先に訪問しましたが、宣言する前に明示的に間違いを犯しました。

数日間私を悩ましていた私の問題を簡単に修正。

app.enable('trust proxy'); 

// Add a handler to inspect the req.secure flag (see 
// http://expressjs.com/api#req.secure). This allows us 
// to know whether the request was via http or https. 

app.use (function (req, res, next) { 
    if (req.secure) { 
      // request was via https, so do no special handling 
      next(); 
    } else { 
      // request was via http, so redirect to https 
      res.redirect('https://' + req.headers.host + req.url); 
    } 
}); 
+0

Sooooo .....答えは何ですか?答えにはコードが含まれています。私たちに見せてください。 – Rudie

+0

これはBluemix環境では機能しません –

1

あなたのアプリがBluemixで動作するとき、実際にはプロキシの後ろにあります。プロキシがリクエストを処理しているかどうかは、httpでもhttpsでも、アプリケーションにhttpとして転送されます。したがって、あなたのアプリはhttpだけを聞くべきです。外部ユーザーが常にhttpsを使用するようにするには、リクエスト内のX-Forwarded-Protoまたは$WSSCヘッダーをチェックして、最初に使用されたプロトコルを確認します。 httpであれば、httpsにリダイレクトすることができます。しかし、再び、httpsチャンネルはBluemixプロキシで終了し、あなたのアプリにHTTPとして中継されます。

+1

こんにちはマーク - ありがとう - 私は今それについて作業します。私たちは私たちの証明書をBluemixにアップロードしています - そのため、すべてがcname転送で動作しています...セキュリティのためにすべてがSSLでロードする必要があります。 –

+2

Marcの答えを補うには、この記事を参照してください。http://www.tonyerwin.com/2014/09/redirecting-http-to-https-with-nodejs.html –

関連する問題