2011-11-16 65 views

回答

9

我也部署在Heroku上。當他們使用nginx來反向代理時,他們添加了一堆他們的頭文件。這種情況下的興趣之一是x前轉原型。

這是我做過什麼:

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)創建。他們也會聽取不同的端口。嘗試是這樣的:

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) 

否則,可能被實現爲路線中間件

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

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

現在,你只需要包含函數參考:redirect_secure()上,你想重定向到的路徑一個安全的位置。

+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

相關問題