ECONNREFUSED 错误在一个盒子上,但在另一个盒子上没有

时间:2021-01-27 19:12:07

标签: javascript node.js tcp

我有一个简单的 Node 测试脚本,它通过 https 发送一个 POST 请求,它在一个 Ubuntu 机器上完美运行,但在类似配置(但旧版本)的机器上失败。这是脚本:

const https = require('https');

const data = 'artist=Betty2%20Hutton2&title=It%20Is%20A%20Good%20Day';

const options = {
  hostname: 'my_server.com',
  port: 443,
  path: '/path/to/script.php',
  method: 'POST',
  headers: {
    'Content-Type': 'text/plain',
    'Content-Length': data.length
  }
};

const req = https.request(options, function(res) {
  console.log('status code is: ' + res.statusCode);

  res.on('data', function(d) {
     process.stdout.write(d)
    });

req.on('error', function(error) {
  console.error(error)
});

});

req.write(data);
req.end();

我可以让它在一个 Ubuntu 机器上工作,但在另一个(我真正需要它的机器上)上,我收到这个错误:

<块引用>

node.js:134 扔e; // process.nextTick 错误,或第一个滴答时的 'error' 事件 ^ 错误:ECONNREFUSED,连接被拒绝 在 Socket._onConnect (net.js:601:18) 在 IOWatcher.onWritable [作为回调] (net.js:186:12)

从这个脚本失败的盒子里,我可以 ping 主机(运行 Apache2),我可以通过 telnet 连接到主机 + 端口,所以我知道接收机器正在监听。我不明白为什么这行不通。

您对诊断此问题的任何建议将不胜感激。

编辑:

我还尝试使用请求模块发送 POST 数据。我的代码是:

var request = require('request');
var BASE = 'https://my_server.com/path/to/script.php';
var data = 'artist=Betty2%20Hutton2&title=It%20Is%20A%20Good%20';

request({
  method: 'POST',
  uri: BASE,
  form: data
}, function(e,r,body) {
      console.log('ERROR' + e);
      //console.log('RESPONSE' + r.statusCode);
      console.log('BODY'+body);
  }).start();

结果:

<块引用>

错误错误:套接字挂断

编辑 2:

我开始认为这是 SSL 问题。如果我运行这个:

curl -I http://a_non_SSL_site.com/

我得到了一个 200 结果代码和您期望的其他信息。但是,如果我卷曲 https 站点,我会返回:

<块引用>

curl: (35) 错误:1407742E:SSL 例程:SSL23_GET_SERVER_HELLO:tlsv1 警报协议版本

我是否正确认为这是 SSL 问题,如果是,我该如何解决?

谢谢。

编辑 3

以防万一有人在未来偶然发现这个问题,这是一个 SSL 问题,或者更准确地说,是一个 TLS 问题。升级 OpenSSL 解决了该问题。

0 个答案:

没有答案
相关问题