节点.js提供 SSL 和静态文件



我有一个问题,当我添加 app.use(express.static(__dirname + '/public'((时,我无法设置支持 ssl 的节点 js 服务器,并且也可以通过此 SSL 提供静态文件。有人试图这样做吗?

//require engines
var express     = require('express');
var session     = require('express-session');
var bodyParser  = require('body-parser')
//init express engine
var app = express();
//using
app.use(bodyParser.json());
app.use(express.static(__dirname + '/public'));
var activeport = process.env.PORT ? process.env.PORT : 4003;
if (process.env.NODE_ENV === "production") {
    var fs = require('fs');
    var https = require('https');
    var options = {
        key: fs.readFileSync(global.appRoot + '/xxx.pem'),
        cert: fs.readFileSync(global.appRoot + '/yyy.crt'),
        passphrase: "123123",
        requestCert: false,
        rejectUnauthorized: false
    };
    var server = https.createServer(options, app).listen(activeport, function () {
        console.log('Server listening on port ' + activeport);
    });
}
else {
    app.listen(activeport, function () {
        console.log('Server listening on port ' + activeport);
    });
}

试试这个:

const path = require('path'); // <--- Require this
app.use(express.static(path.join(__dirname, '/dist')));

好的,知道了。因为我使用 Azure 作为我的托管服务提供商,Azure 为您提供了所有 SSL 支持,所以我不需要创建专用的 https 服务器:

var server = https.createServer(options, app).listen(activeport, function () {
    console.log('Server listening on port ' + activeport);
});

我需要做的就是添加我的 web.config 以下代码 - 永久重定向到 https url。

<!-- Redirect all traffic to SSL -->
    <rule name="Force HTTPS" enabled="true">
      <match url="(.*)" ignoreCase="false" />
      <conditions>
        <add input="{HTTPS}" pattern="off" />
      </conditions>
      <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" appendQueryString="true" redirectType="Permanent" />
    </rule>

参考资料:如何在 Azure 网站中的节点.js强制表达使用 https?

最新更新