2013-02-24 45 views
2

我想讓用戶使用http和https訪問所有網站的頁面。如何通過ssl運行docpad?

我也希望能夠將需要加密的某些路徑(/ api/*和/ backend/*)的http請求重定向到https(強制https)。

回答

2

節點版本:v0.9.10

docpad版本:v6.21.10

重要提示:似乎對於docpad config file的文件已經過時,我不得不挖源,發現serverHttp和serverExpress選項現在必須在服務器選項下。

這裏的項目的docpad.js文件:

var https = require('https'), 
path = require('path'), 
fs = require('fs'), 
express = require('express'); 

var sslOptions = { 
        key: fs.readFileSync(path.resolve(__dirname, "../../certificates/key.pem")), 
        cert: fs.readFileSync(path.resolve(__dirname, "../../certificates/cert.pem")) 
       }; 

serverExpress = express(); 
serverHttps = https.createServer(sslOptions, serverExpress); 

docpadConfig = { 
    environments: { 
     http: { 
      port: 80, 
      events: { 
       serverExtend: function (server) { 
        var i = 0; 

        // Redirect requests that requires https 
        server.server.get(/^\/(api|backend)\/.*/, function (req, res) { 
         res.redirect('https://' + req.headers.host + req.url) 
        }); 
       } 
      } 
     }, 
     https: { 
      port: 443, 
      server: { 
       serverHttp: serverHttps, 
       serverExpress: serverExpress 
      } 
     } 
    } 
}; 

module.exports = docpadConfig; 

與運行在兩種環境:

docpad --env "http" run 
docpad --env "https" run 

,就是這樣。

+0

這個人太棒了。我愛你基於環境的方法。做得好! Re「我必須挖掘源代碼才能發現serverHttp和serverExpress選項現在必須在服務器選項下。」看起來像一個錯誤,在這裏創建一個問題:https://github.com/bevry/docpad/issues/457 – balupton 2013-03-12 21:55:00

+0

我很高興你喜歡它:)謝謝你開發docpad。 – theosp 2013-03-13 20:50:02