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

如何让Node.js应用端口HTTP转HTTPS,且不破坏80/443默认访问路径?

解决方案:主域名80/443恢复访问 + 30000端口强制HTTPS

核心问题分析

你遇到的主域名加载超时,本质是OpenLiteSpeed反向代理协议不匹配:Node.js开启HTTPS服务后,OpenLiteSpeed如果仍用HTTP协议请求30000端口,会因协议冲突导致连接失败;同时30000端口的HTTPS强制跳转需要明确的规则配置。


步骤1:修复主域名80/443访问

方案A:适配Node.js的HTTPS服务(直接用现有Node配置)

  1. 登录Webuzo面板,找到example.com对应的OpenLiteSpeed虚拟主机配置
  2. 进入「Context」选项卡,删除原有代理规则,新建Proxy类型的Context:
    • 路径设为/
    • 代理目标填写https://127.0.0.1:30000(必须用HTTPS协议,匹配Node.js的服务类型)
    • 勾选「Secure」选项,确保代理通信加密
  3. 保存配置后重启OpenLiteSpeed:
    sudo systemctl restart lsws
    

方案B:简化架构(推荐,避免双重SSL冲突)

让OpenLiteSpeed统一处理SSL,Node.js仅运行HTTP服务:

  1. 修改app.js,将https.createServer替换为http.createServer,保持监听30000端口
  2. 回到OpenLiteSpeed虚拟主机的Context配置,代理目标改为http://127.0.0.1:30000
  3. 重启OpenLiteSpeed和Node.js服务

步骤2:强制30000端口走HTTPS

方法1:通过OpenLiteSpeed端口监听实现跳转

  1. 进入OpenLiteSpeed的「Listeners」选项卡:
    • 新建HTTP监听,端口设为30000,绑定example.com域名
    • 添加重写规则:
      RewriteEngine On
      RewriteCond %{HTTPS} off
      RewriteRule ^(.*)$ https://%{HTTP_HOST}:30000$1 [R=301,L]
      
    • 新建HTTPS监听,端口设为30000,绑定example.com,配置好SSL证书(和主域名用同一份即可),并将此监听的代理目标指向Node.js服务(HTTP或HTTPS,对应你前面的配置)
  2. 保存配置后重启OpenLiteSpeed

方法2:通过Node.js代码实现(适合不想动OpenLiteSpeed端口配置的情况)

由于同一端口无法同时监听HTTP和HTTPS,需调整Node.js监听端口:

const http = require('http');
const https = require('https');
const fs = require('fs');

// SSL证书配置(保持你原有的路径)
const sslOptions = {
  key: fs.readFileSync('/path/to/your/private.key'),
  cert: fs.readFileSync('/path/to/your/certificate.crt')
};

// HTTP服务监听30000,强制重定向到HTTPS的30001
http.createServer((req, res) => {
  res.writeHead(301, { Location: `https://${req.headers.host.replace(':30000', ':30001')}${req.url}` });
  res.end();
}).listen(30000);

// HTTPS服务监听30001
https.createServer(sslOptions, (req, res) => {
  // 你的原有业务逻辑
  res.write('Hello HTTPS!');
  res.end();
}).listen(30001);

之后记得在OpenLiteSpeed的30001端口配置HTTPS监听,同时开放防火墙30001端口。


步骤3:检查基础环境

  1. 开放必要端口:
    sudo ufw allow 80/tcp
    sudo ufw allow 443/tcp
    sudo ufw allow 30000/tcp
    # 如果用方法2的30001端口,再加:sudo ufw allow 30001/tcp
    sudo ufw reload
    
  2. 确认端口无冲突:
    sudo lsof -i :30000
    
    若有其他进程占用,执行kill -9 <PID>终止后重启Node.js服务。

验证效果

  • 访问http://example.com:应自动跳转至https://example.com并正常加载
  • 访问http://example.com:30000:应自动跳转至https://example.com:30000并正常加载

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 05:28:15