2017-04-05 42 views
-1

我有一个问题,我无法设置一个节点js服务器,支持ssl,也可以通过此ssl服务静态文件,当我添加app.use (express.static(__ dirname +'/ public'))这些文件正从https常规服务器提供。 有人试图这样做?node.js与ssl和静态filles服务

//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); 
    }); 
} 
+0

你确定你是在生产模式?好像你可能实际上在else块中 – powerc9000

回答

0

试试这个:

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

好,知道了。 Becouse我使用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> 

Referar: How do you force express on node.js in Azure Websites to use https?