【问题标题】:Javascript http server: ERR_CONNECTION_REFUSEDJavascript http 服务器:ERR_CONNECTION_REFUSED
【发布时间】:2018-03-03 13:27:34
【问题描述】:

我最近尝试在我的服务器上安装 SSL 证书。证书文件(privkey.pem、fullchain.pem)位于应用程序的根目录中。当我运行以下代码时:

var express = require('express');
var app = express();
var helmet = require('helmet');
var db = require('./server/database.js');
var fs = require('fs');
var ssl = require('ssl-root-cas');

'use strict';
var rootCas = require('ssl-root-cas/latest').create();

// default for all https requests
// (whether using https directly, request, or another module)
require('https').globalAgent.options.ca = rootCas;

app.use(helmet()); 

var options = {
    key : fs.readFileSync('privkey.pem', 'ascii'),
    cert : fs.readFileSync('fullchain.pem', 'ascii')
}

app.get('/', function(req, res) {
    res.sendFile(__dirname + '/public/index.html');
});
app.use('/public', express.static(__dirname + '/public'));

var serv = require('https').createServer(options, app);

服务器运行没有错误。我添加的“服务器正在侦听端口 80”确认显示,并且证书似乎不会导致任何直接问题。但是,当我尝试连接到域(使用 https://)时,Chrome 会以 ERR_CONNECTION_REFUSED 响应。通过 http 连接到域时,Chrome 会使用相同的消息进行响应。我正在使用稍后在代码中初始化的 SocketIO,我没有发现我的问题和 SocketIO 的函数之间有任何联系。什么原因导致无法连接?

【问题讨论】:

  • 在您添加证书之前它是否正常工作?
  • 是的,只有在我添加了对 https 的支持后它才停止工作。
  • 你能看日志吗?
  • 这些日志将位于何处?我可以通过 FTP 和 SSH 访问服务器。
  • URL 中的 https 前缀使您的浏览器连接到端口 443 而不是 80。服务器侦听端口 80 是不够的。

标签: javascript node.js express ssl


【解决方案1】:

https 请求是通过端口 443 而不是 80 发送的。以下代码可以正常工作:

var express = require('express');
var app = express();
var helmet = require('helmet');
var db = require('./server/database.js');
var fs = require('fs');
var ssl = require('ssl-root-cas');

'use strict';
var rootCas = require('ssl-root-cas/latest').create();

// default for all https requests
// (whether using https directly, request, or another module)
require('https').globalAgent.options.ca = rootCas;

app.use(helmet()); 

var options = {
    key : fs.readFileSync('privkey.pem', 'ascii'),
    cert : fs.readFileSync('fullchain.pem', 'ascii')
}

app.get('/', function(req, res) {
    res.sendFile(__dirname + '/public/index.html');
});
app.use('/public', express.static(__dirname + '/public'));

var serv = require('https').createServer(options, app);
//var serv = require('https').Server(app); //DEBUG ONLY

【讨论】:

    猜你喜欢
    • 2015-08-07
    • 2016-06-11
    • 2018-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多