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

如何在同一台服务器同时运行Node与Apache,实现HTTPS访问API?

同服务器运行Node+Apache并支持HTTPS访问的解决步骤

1. 清理冲突的Apache配置

你当前存在两个绑定aws.website.com的80端口虚拟主机配置,存在冲突,先删除000-default.conf中对应ServerName aws.website.com的<VirtualHost *:80>块,保留website.com.conf中的80端口配置即可,该配置已经配置了80端口自动跳转HTTPS,符合需求。

2. 给SSL虚拟主机添加反向代理规则

你之前的反向代理规则只写在了80端口配置中,但所有请求都会跳转到443端口,而443端口的SSL配置中没有任何代理规则,导致请求直接访问静态文件目录返回404,修改website.com.le-ssl.conf的<VirtualHost *:443>块,添加如下配置:

ProxyPreserveHost On
# 仅转发/endpoint前缀的请求到Node服务,保留静态文件访问能力
ProxyPass /endpoint http://127.0.0.1:3001/endpoint
ProxyPassReverse /endpoint http://127.0.0.1:3001/endpoint
# 如果需要所有请求都走Node服务,把上面两行的/endpoint替换为/即可

配置修改完成后执行以下命令启用必要的Apache模块并重启服务:

a2enmod proxy proxy_http
systemctl restart apache2

3. 修复Node服务代码错误

你的App.js存在多处语法和逻辑问题,会直接导致请求异常:

  • 顶部缺少path模块引入,调用path.resolve会报错,添加const path = require('path')到文件头部
  • 重复引入express模块,且路由定义不应该写在App.js末尾,需要移动到单独的routes/routes.js文件中
  • 路由定义顺序错误:app.get('*', ...) 全局匹配规则写在了接口路由前面,会拦截所有接口请求,需要将这行代码移动到所有接口路由定义的后面
  • 路由路径书写错误:router.post('back/get-email' 缺少路径开头的斜杠,修改为router.post('/back/get-email'

4. 验证服务可用性

  • 确认Node服务正常运行:执行netstat -tulpn | grep 3001,确认3001端口处于监听状态
  • 本地测试Node接口:执行curl http://127.0.0.1:3001/endpoint,确认能正常返回结果
  • 测试HTTPS访问:执行curl https://aws.website.com/endpoint,确认无超时、404错误即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:06:03