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

Windows VPS上Node.js服务器无法通过子域名访问问题求助

配置方案与排查步骤

一、Cloudflare端核心配置修正

  1. 修正DNS记录目标IP
    你的VPS内网IP是192.168.0.12,但radio.example.net的A记录必须指向VPS的公网IP,而非内网IP。立即检查Cloudflare DNS设置,确保记录目标为VPS对外暴露的公网IP。
  2. 开启Cloudflare代理(橙色云朵)
    在DNS记录列表中,将radio.example.net对应的云朵图标切换为橙色(代理模式)。灰色云朵仅做DNS解析,此时HTTPS请求会直接打向你的HTTP服务,浏览器会因协议不匹配拒绝连接。
  3. 设置SSL/TLS模式为「灵活」
    进入Cloudflare「SSL/TLS」→「概述」页面,将SSL模式设为灵活。该模式下,Cloudflare与客户端用HTTPS通信,Cloudflare到你的Node.js服务(HTTP)用HTTP通信,适配当前服务无SSL证书的场景。
  4. 开启「始终使用HTTPS」
    在「SSL/TLS」→「边缘证书」中开启该选项,确保所有访问radio.example.net的请求自动跳转到HTTPS。

二、Node.js服务优化

  1. 修复CORS配置冲突
    你的代码中同时设置了Access-Control-Allow-Origin: *和Access-Control-Allow-Credentials: true,这两个配置无法同时生效,浏览器会抛出错误。根据需求二选一:
    • 若不需要身份凭据(如Cookie),删除Access-Control-Allow-Credentials配置;
    • 若需要带凭据,将Access-Control-Allow-Origin改为具体域名:
      res.setHeader('Access-Control-Allow-Origin', 'https://radio.example.net');
      
  2. 明确监听所有网卡
    修改server.listen参数,确保服务监听所有网卡(而非仅内网IP):
    server.listen(443, '0.0.0.0', () => {
        console.log('Server listening on port 443');
    });
    
  3. 可选:升级为HTTPS服务
    若想使用Cloudflare的「严格」SSL模式,可通过Cloudflare免费获取证书,改用https模块启动服务:
    const https = require('https');
    const fs = require('fs');
    
    const options = {
        key: fs.readFileSync('path/to/private.key'),
        cert: fs.readFileSync('path/to/certificate.crt')
    };
    
    const server = https.createServer(options, app);
    

三、排查步骤

  • 验证DNS解析:本地终端执行nslookup radio.example.net,若返回Cloudflare节点IP,说明代理已开启;若返回VPS公网IP,说明代理未开启(需切换橙色云朵)。
  • 测试源站连通性:用curl http://[VPS公网IP]:443测试服务是否正常响应,确认服务运行且端口可访问。
  • 检查Cloudflare防火墙:临时关闭WAF规则或降低安全级别,排查是否被拦截。
  • 确认Windows防火墙:再次检查Windows防火墙入站规则,允许443端口的HTTP流量。
  • 查看Cloudflare日志:进入「Analytics」→「Logs」,查看请求是否被拦截或返回异常状态码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 19:20:07