Node.js和https配置

时间:2012-11-06 13:38:08

标签: node.js https express

我有一个使用node.js运行的简单应用程序。下面是我的server.js:

var myApp = require('./lib/myapp')
new myApp({
port: 8000
 });

我可以在http://myserver.com:8000

访问该应用程序

我想设置它,因此我可以使用https://myserver.com

访问它

我已尝试过在这里提出的问题中回答的各种方法,但我无法使其正常工作。我认为应用程序初始化的方式是原因,但我不确定。

我知道我可以把它放在Apache之后,但我想用节点来做。

如果有人可以为我修改这个server.js,那将是一个很大的帮助!

由于

Noman A.

3 个答案:

答案 0 :(得分:0)

https建议你想通过安全层(端口443)运行它,最好的办法是把它放在apache或更好nginx之后,让真正的web服务器管理ssl证书等而您的node.js专注于应用程序业务逻辑

如果你想通过node.js look here

来做

答案 1 :(得分:0)

myApp是express / connect应用吗?我不喜欢你创建的new关键字的奇怪构造函数,我们需要看到它的内容才能提供帮助。

  1. 首先让它在“特权”端口上运行,即将8000更改为80,但保留http服务器。
  2. 一旦你弄清楚如何运行具有正确权限的服务器,就可以轻松地将http换成https,将80换成443。
  3. 但是,由于您的客户将首先尝试访问http,因此您需要将其重定向到您网站的https版本。如果您以“快速方式”执行此操作,则可以设置相同的应用程序,只需使用http和https服务器进行侦听即可。然后添加一个中间件,将所有http个请求重定向到https,您就完成了。看看这个How to force SSL / https in Express.js

    编辑:这个答案有一个更干净的双服务器/单应用程序设置,但不包含任何有关转发请求的内容:Listen on HTTP and HTTPS for a single express app

    理想设置导出main.js中的express / connect app对象。单独的runner.js只需要应用程序并将其传递给两个服务器(1个http& 1 https)并使用正确的选项。

答案 2 :(得分:0)

感谢大家对这个问题的贡献。我非常感谢所有指针!

特别提到JohnnyHK,他的建议让我走上正轨。我能够使用node-http-proxy解决我的问题。简单有效!以下是我的server.js现在的样子:

var MyApp = require('./lib/app');
var fs = require('fs'),
    http = require('http'),
    https = require('https'),
    httpProxy = require('http-proxy');

var options = {
  https: {
    key: fs.readFileSync('certs/server.key', 'utf8'),
    cert: fs.readFileSync('certs/server.crt', 'utf8'),
    ca: fs.readFileSync('certs/ca.crt', 'utf8')
  },
  target: {
    https: true // This could also be an Object with key and cert properties
  }
};

var app = new MyApp({
    port: 8080
  });  

var proxy = new httpProxy.HttpProxy({
  target: {
    host: 'localhost', 
    port: 8080
  }
});
https.createServer(options.https, function (req, res) {
  proxy.proxyRequest(req, res)
}).listen(443);

再次感谢大家!

-Noman A。