Cloudflare 522错误 - JavaScript客户端连接到Node服务器

6

我正在尝试从托管JavaScript客户端的Apache Web服务器连接到Nodejs https服务器,但是我收到了一个错误消息:522-无法加载响应数据:找不到具有给定标识符的资源的数据。 Apache Web服务器在与节点服务器相同的域/服务器上运行,并且这些服务器由Cloudflare代理:

两个服务都在同一台服务器/计算机上运行。 这是我启动nodejs服务器的方式:

// Certificates are the same used by apache web server in Virtual Host 
// and were got from Cloud Flare Panel > SSL/TLS > Origin Server
var options = {
  key: fs.readFileSync('/etc/cloudflare/example.com.key'),
  cert: fs.readFileSync('/etc/cloudflare/example.com.pem'),
};

var socket = require('socket.io');
var http = require('https');

// Port 2053 was listed as a https port supported by Cloud Flare in
// https://developers.cloudflare.com/fundamentals/get-started/reference/network-ports/
var argv = require('optimist')
    .usage('Usage: --port [num]')
    .default({port: 2053})
    .argv;

var server = http.createServer(options, function(req, res) {
});

server.listen(argv.port);

var io = socket.listen(server);

这是我如何从JavaScript客户端连接到Node.js服务器的方法:

let socket = io.connect("https://www.example.com:2053", {secure: true});

任何技巧吗? 编辑1: 如果我将节点服务器创建为http(而不是https),它可以正常工作。

你应该使用这个错误的文档:https://support.cloudflare.com/hc/en-us/articles/115003011431-Troubleshooting-Cloudflare-5XX-errors 提供域名对于帮助你非常关键。如果你无法提供域名,我建议你如果有付费计划,直接联系Cloudflare支持团队。 - Ross Jacobs
@RossJacobs 谢谢。我阅读了提供的文档,但是没有找到解决方案。我注意到如果我将节点服务器运行为http而不是https,则连接可以正常工作。是否需要采取其他措施来实现https连接? - Arivan Bastos
请检查您的设置中的灵活SSL和完全SSL。您是否拥有实际需要的源服务器SSL设置? - Ross Jacobs
@ArivanBastos 如果您将Node.js服务器运行在低于1024的端口上,例如444,会发生什么? - Mostafa Fakhraei
1个回答

0

我通过以下步骤成功连接到节点服务器:

  1. 在实例化https节点服务器时设置“key”和“cert”选项:这些文件可以在Cloud Flare面板>选择您的域名>SSL/TLS>源服务器中生成。不需要“ca”,“requestCert”或“rejectUnauthorized”参数。
  2. 在节点服务器中使用https://developers.cloudflare.com/fundamentals/get-started/reference/network-ports/列出的端口之一。Cloud Flare会自动将这些端口重定向到您的源服务器上的同一端口
  3. 在您的源服务器防火墙中允许入站连接(第2步中选择的端口)。
  4. Cloud Flare面板>选择您的域名>SSL/TLS>概述中将SSL设置为FULL

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接