2011-03-01 67 views
4

基礎上回答這個問題:我可以配置expressjs通過http爲http服務某些頁面嗎?

How do I configure nodejs/expressjs to serve pages over https?

我一直在試圖建立相當於:

var express = require('express'); 
var fs = require("fs"); 
var crypto = require('crypto'); 

var app = express.createServer(); 
var appSecure = express.createServer(); 
var privateKey = fs.readFileSync('privatekey.pem').toString(); 
var certificate = fs.readFileSync('certificate.pem').toString(); 
var credentials = crypto.createCredentials({key: privateKey, cert: certificate}); 
appSecure.setSecure(credentials); 


app.get('/secretStuff', function(req,res) { 
//redirect to https 
} 

appSecure.get('/secretStuff', function(req, res) { 
//show you the secret stuff 
} 

這東西是可行與expressjs的當前版本和節點2.4?

回答

3

是的,這可以完成,它看起來像你已經有你所需要的大部分。只需發送重定向你app.get處理

app.get('/secretStuff', function(req,res) { 
    res.redirect('https://' + req.header('Host') + req.url); 
} 

另外,還要確保你做這樣的事情app.listen(80)appSecure.listen(443)實際的相應端口上啓動服務器。否則,請確保使用正確的端口構建HTTPS URL。對於生產來說,這件事通常是在您的應用服務器(node.js)之外使用反向代理(如nginx)處理。在nginx中這樣做是微不足道的,它可以讓你的node.js進程以非root用戶身份運行,並且不需要客戶端直接連接到node.js,而不像nginx那樣爲實時互連TCP連接提供服務(我在這裏解釋Ryan Dahl自己)。

0

您只能通過請求進入的連接來爲網頁提供服務。如果請求未通過https發送,則無法以這種方式發送響應。

所以,首先你必須監聽http和https請求。如果通過http發送的請求通過安全連接進行響應,請不要執行任何處理,而應立即將其重定向到https網址。然後當客戶重新發出請求時,按正常方式處理。

如果框架使用JSGI,那麼你可以使用the redirect module from Jack,否則你將不得不自己做。詳細信息位於鏈接,即響應代碼301和位置:帶有https URL的標頭。

相關問題