2016-03-22 127 views
0

如何強制NodeJS應用使用https URL?我知道代碼和選項。我的問題是,如果我只是去http(桌面) - 它會加載一些內容(但不應該),但如果它移動到http上,它不會加載或轉發到https。在NodeJS/Bluemix中強制使用SSL

這樣 - 我的問題:

如果我只有HTTPS創建服務器,沒有HTTP - 我不知道爲什麼它甚至加載非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 –