2011-11-16 2 views

答えて

9

私はHerokuにも展開します。彼らはnginxを使用してプロキシをリバースするとき、彼らのヘッダの束を追加します。この場合、興味のあるものはx-forwarded-protoです。

これは私がやったことです:

app.get(/\/register$/, function(req, res){ 
    console.log(JSON.stringify(req.headers)); //to see all headers that heroku adds 
    if(req.headers['x-forwarded-proto'] && req.headers['x-forwarded-proto'] === "http") { 
    res.redirect("https://" + req.headers.host + req.url); 
    } 
    else { 
    //the rest of your logic to handle this route 
    } 
}); 
+0

素晴らしい!これは多くの助けとなりました。 +1 :) –

0

セキュアサーバー(https)を実行するには、非セキュアサーバー(http)とは別に作成する必要があります。彼らはまた別のポートで聴くだろう。あなたがにリダイレクトたいパスにredirect_secure():

var express = require('express) 
    , app_insecure = express.createServer() 
    , app_secure = express.createServer({ key: 'mysecurekey' }) 

app_insecure.get('/secure-page',function(req, res){ 
    // This is an insecure page, redirect to secure 
    res.redirect('https://www.mysecuresite.com/secure-page') 
}) 

app_secure.get('/secure-page', function(req,res){ 
// Now we're on a secure page 
}) 

app_insecure.listen(80) 
app_secure.listen(443) 

OR、これはルートミドルウェア

var redirect_secure = function(req, res, next){ 
    res.redirect('https://mysite.com' + req.url) 
} 

app_insecure.get('/secure-page',redirect_secure,function(req, res){}) 

として実装することができ今、あなただけの関数参照を含める必要があります:このような何かを試してみてください安全な場所です。

+0

Herokuの上のピギーバックSSLは、私は、安全でない接続の両方の負荷分散装置に設置し、おそらく安全な証明書をセキュリティで保護さを取ることができ、単一のサーバーを実行していることを意味する、と私は何とかするかどうかを検討する必要があります私は安全なトラフィックを受信して​​います。つまり、安全なサーバーを明示的に作成しなくても、私の安全でないサーバーがhttps sslで実行されている可能性があります。 – MonkeyBonkey

1

app.enable( '信頼プロキシ');

"VarnishやNginxなどのリバースプロキシの背後にあるExpressを使用するのは簡単ですが、設定が必要です.app.enable( 'trust proxy')経由で" trust proxy "設定を有効にすると、ExpressはそれがX-Forwarded *ヘッダーフィールドが信頼されている可能性があります。そうでなければ、簡単に偽装される可能性があります。

Express behind proxies doco

関連する問題