2013-02-24 46 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