如何将子域名指向特定端口的Web服务器?(Cloudflare+Node.js场景)
解决Cloudflare域名绑定Node.js应用并去掉端口号的问题
第一步:添加DNS记录
- 登录Cloudflare控制台,找到你的域名管理页面
- 切换到「DNS」标签,点击「添加记录」
- 根据服务器情况选择记录类型:
- 如果服务器有固定公网IP,选「A」记录,「名称」填
@(代表根域名domain.example)或你想要的子域名,「内容」填服务器IP,「代理状态」选橙色云朵(开启Cloudflare代理) - 如果服务器是通过二级域名指向的,选「CNAME」记录,「名称」同上,「内容」填服务器的域名,「代理状态」同样选橙色云朵
- 如果服务器有固定公网IP,选「A」记录,「名称」填
- TTL选「自动」,保存后等待几分钟让DNS生效
第二步:去掉端口号(两种实用方案)
方案1:Cloudflare Tunnel(推荐,无需暴露服务器端口)
这个方法不用在服务器上开放80/443端口,还能隐藏服务器真实IP:
- 在服务器上安装Cloudflare Tunnel客户端
cloudflared(以Linux为例):wget -q https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb sudo dpkg -i cloudflared-linux-amd64.deb - 执行
cloudflared tunnel login,跟着提示在浏览器中授权你的域名 - 创建隧道:
cloudflared tunnel create node-app-tunnel(名称可自定义) - 新建配置文件
~/.cloudflared/config.yml,替换成你的隧道信息:tunnel: 你的隧道ID(创建隧道后控制台会输出) credentials-file: ~/.cloudflared/刚才的隧道ID.json ingress: - hostname: domain.example service: http://localhost:2000 - service: http_status:404 - 启动隧道并设置开机自启:
sudo cloudflared tunnel run node-app-tunnel sudo cloudflared service install - 回到Cloudflare的DNS页面,添加一条CNAME记录:「名称」填
domain.example,「内容」填你的隧道ID.cfargotunnel.com,代理状态保持橙色 - 完成后访问
domain.example即可直接进入Node.js应用
方案2:Nginx反向代理 + Cloudflare Page Rules
如果你的服务器已经在用Nginx,这种方法适配性更强:
- 在服务器上新建Nginx配置文件
/etc/nginx/sites-available/node-app.conf:server { listen 80; server_name domain.example; location / { proxy_pass http://localhost:2000; 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; } } - 启用配置并重启Nginx:
sudo ln -s /etc/nginx/sites-available/node-app.conf /etc/nginx/sites-enabled/ sudo systemctl restart nginx - 回到Cloudflare,进入「规则」→「页面规则」,创建一条规则:
- 匹配URL填
domain.example/* - 添加设置「始终使用HTTPS」(推荐开启)
- 确保DNS记录的代理状态为橙色云朵,这样Cloudflare会把请求转发到服务器的80端口,Nginx再转接到2000端口
- 匹配URL填
- 现在访问
domain.example就不需要加端口号了
内容的提问来源于stack exchange,提问作者StepanKomis
相关产品推荐
相关产品推荐

