0

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

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

我可以在http://myserver.com:8000访问应用程序

我想设置它,所以我可以使用https://myserver.com访问它

我尝试了各种方法来回答这里提出的问题,但我无法让它发挥作用。我认为初始化应用程序的方式是原因,但我不确定。

我知道我可以把它放在 Apache 后面,但我想用 node 来做。

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

谢谢

诺曼 A.

4

3 回答 3

0

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

如果你想通过 node.js 来做,请看这里

于 2012-11-06T13:41:47.757 回答
0

myApp 是express/connect应用程序吗?我不喜欢new您创建的带有关键字的奇怪构造函数,我们需要查看它的内容以提供帮助。

  1. 首先让它在“特权”端口上运行,即将你的更改800080,但保留http服务器。
  2. 一旦你弄清楚如何运行具有正确权限的服务器,它应该很容易换成http443https和 80。

但是,由于您的客户会尝试先到达http,因此您需要将他们重定向到https您网站的版本。如果您以“快速方式”执行此操作,则可以设置相同的应用程序并简单地使其同时使用 http 和 https 服务器进行侦听。然后添加一个中间件将所有http请求重定向到https,你就完成了。看看这个How to force SSL / https in Express.js

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

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

于 2012-11-06T13:59:17.363 回答
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);

再次感谢大家!

——诺曼 A。

于 2012-11-06T16:17:21.413 回答