You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Cloudflare后Node.js站点Socket.IO 443端口请求出现404错误

解决Cloudflare切换后443端口Socket.IO请求404的问题

我之前也碰到过类似Cloudflare和Socket.IO配合的坑,结合你的情况,咱们一步步排查解决:

1. 先检查Cloudflare的代理与SSL模式

这是最常见的触发原因:

  • 代理状态:确认你的A记录是否开启了Cloudflare的代理(橙色云朵图标)。如果443端口请求走了代理,Cloudflare的SSL模式会直接影响请求转发逻辑:
    • 如果当前是Flexible SSL模式:Cloudflare到你的服务器会发送HTTP请求,但如果你的Socket.IO服务器在443端口监听的是HTTPS(带SSL证书),服务器会无法正确解析这个HTTP请求,直接返回404。建议切换到Full或**Full (strict)**模式,前提是你的服务器有有效的SSL证书(比如Let's Encrypt的免费证书)。
    • 如果已经是Full模式:要确保你的Socket.IO配置信任Cloudflare的代理头,否则它无法识别真实的请求协议和来源。在Node.js代码里添加trustProxy: true配置:
      const io = require('socket.io')(server, {
        trustProxy: true,
        // 其他Socket.IO配置项
      });
      

2. 排查服务器端的Socket.IO监听配置

  • 确认你的Node.js服务器在443端口确实正确挂载了Socket.IO,且路径是/socket.io/(和客户端请求的路径完全一致)。如果代码里设置了自定义path参数,客户端请求路径必须对应。
  • 如果你用了Nginx反向代理443端口到Node.js,一定要给/socket.io/路径添加专门的转发规则,否则Nginx会把Socket.IO的polling请求当成普通HTTP请求处理,返回404。示例Nginx配置:
    location /socket.io/ {
      proxy_pass http://localhost:3000; # 替换成你的Node.js服务实际端口
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
    }
    

3. 检查Cloudflare的防火墙与缓存规则

  • 防火墙规则:查看Cloudflare的防火墙是否误拦截了/socket.io/*路径的请求。可以临时禁用防火墙规则测试,或者添加一条明确允许该路径的规则。
  • 缓存设置:Socket.IO的polling请求是动态交互请求,绝对不能被缓存。在Cloudflare的缓存规则里,给/socket.io/*路径设置Cache Level: Bypass,避免Cloudflare返回缓存的错误响应。

4. 验证端口与请求路由

最后可以直接在服务器本地测试443端口的Socket.IO请求,比如用curl命令:

curl -v https://your-domain.com/socket.io/?EIO=3&transport=polling&t=M8UDUNL

如果服务器本地返回200,说明问题确实出在Cloudflare的配置上;如果本地也返回404,那就要重点排查服务器端的Socket.IO挂载或端口监听配置了。

内容的提问来源于stack exchange,提问作者user3594844

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 09:18:50