我想让用户使用 http 和 https 访问所有站点的页面。
我还希望能够将需要加密到 https(强制 https)的某些路径(/api/* 和 /backend/*)的 http 请求重定向。
节点版本:v0.9.10
文档板版本:v6.21.10
重要提示: docpad 配置文件的文档似乎已过时,我不得不挖掘源代码发现 serverHttp 和 serverExpress 选项现在必须在 server 选项下。
这是项目的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
就是这样。