我想让用户使用http和https访问网站的所有页面。

我还希望能够将需要加密的某些路径(/ api / *和/ backend / *)的HTTP请求重定向到https(强制使用https)。

最佳答案

节点版本:v0.9.10

docpad版本:v6.21.10

重要说明:docpad config file的文档似乎已过时,我不得不挖掘源代码才能发现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


就是这样。

关于ssl - 如何在ssl上运行docpad?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15047273/

10-12 05:16