【问题标题】:Node.js and https configurationNode.js 和 https 配置
【发布时间】:2012-10-26 11:26:21
【问题描述】:

我有一个使用 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.

【问题讨论】:

  • 您是否考虑过为此使用node-http-proxy
  • 事实上,我没有!让我检查一下,看看它是否有帮助!谢谢!
  • 在使用 node-http-proxy 时,我收到此错误:“发生错误:{"code":"ECONNRESET"}”。 Http代理工作正常,https抛出这个错误。

标签: node.js https express


【解决方案1】:

感谢大家对此问题的贡献。我真的很感激所有的指点!

特别提到 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.

【讨论】:

    【解决方案2】:

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

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

    但是由于您的客户会首先尝试访问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)。

    【讨论】:

    • 通过将端口从 8000 更改为 80,我可以在端口 80/http 上运行它。我将查看您为 express 提供的链接。谢谢!
    【解决方案3】:

    https 建议您希望在安全层(端口 443)上运行它,最好将其放在 apache 或更好的 nginx 后面,并让真正的 Web 服务器在您的节点上管理 ssl 证书等。 js专注于应用业务逻辑

    如果你想通过 node.js 来做到这一点look here

    【讨论】:

    • 感谢 ArtDeineka 的评论。问题是,我看到人们将节点本身用于 https 目的,所以我想学习如何去做,或者我做错了什么。当然,Apache/ngnix 对此非常有用。
    • 感谢您提供链接,我已经看到并尝试了其中发布的一些解决方案。我认为我的主要问题是将当前 server.js 的这一部分放在哪里: new myApp({port: 8000 });如果你能给我指点,或者样品,那将是救命稻草!
    猜你喜欢
    • 2018-10-28
    • 1970-01-01
    • 2017-09-18
    • 2017-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-16
    • 1970-01-01
    相关资源
    最近更新 更多