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

React应用需用443端口实现HTTPS,遭遇EADDRINUSE错误求助

问题描述

我的React应用需要通过HTTPS连接,因此打算部署在443端口,但无论指定哪个端口运行应用都会报错;当指定443端口时,错误前缀为:

Error: listen EADDRINUSE: address already in use :::443

完整错误栈信息:

0|server   |     at Module.load (node:internal/modules/cjs/loader:981:32)
0|server   |     at Function.Module._load (node:internal/modules/cjs/loader:822:12)
0|server   |     at Object.<anonymous> (/home/fsadmin/.nvm/versions/node/v16.13.1/lib/node_modules/pm2/lib/ProcessContainerFork.js:33:23)
0|server   |     at Module._compile (node:internal/modules/cjs/loader:1101:14)
0|server   |     at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
0|server   |     at Module.load (node:internal/modules/cjs/loader:981:32)
0|server   |     at Function.Module._load (node:internal/modules/cjs/loader:822:12)
0|server   |     at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
0|server   |     at node:internal/main/run_main_module:17:47 {
0|server   |   code: 'EADDRINUSE',
0|server   |   errno: -98,
0|server   |   syscall: 'listen',
0|server   |   address: '::',
0|server   |   port: 443
0|server   | } 

执行lsof -i :443仅显示Nginx相关进程,我认为Nginx应该能和应用并发运行,不会阻塞请求。另外,所用域名此前由他人托管,原主机账号已停用,怀疑是否与此有关,求排查思路和解决建议。


排查思路
  • 核对Nginx监听配置:同一端口只能被单个进程绑定,Nginx如果配置了listen 443 ssl;就会占用443端口,你的Node应用自然无法再绑定。去/etc/nginx/conf.d/或/etc/nginx/sites-available/目录下检查Nginx配置文件,确认是否存在443端口的监听规则。
  • 完整检查端口占用:lsof -i :443可能遗漏部分进程,改用netstat -tulpn | grep :443,该命令会显示所有绑定443端口的进程PID和名称,确认是否真的只有Nginx在占用。
  • 验证域名解析状态:虽然原主机账号停用,但要确认当前域名DNS记录是否指向你的服务器IP。用nslookup 你的域名或dig 你的域名查看解析结果,若解析到旧主机,会影响外部访问,但和端口占用报错无关。
  • 检查PM2残留进程:错误栈提到PM2,可能之前有未彻底关闭的进程。执行pm2 list查看所有PM2管理的进程,pm2 kill杀死所有进程后再重启应用,看是否还报端口占用。

解决建议
  • 使用Nginx反向代理(推荐方案):让Nginx监听443端口处理HTTPS请求,再将请求转发到React应用(监听3000等非特权端口),步骤如下:
    1. 调整React应用配置,使其监听非特权端口(比如3000),启动时不要指定443。
    2. 修改Nginx配置文件,添加反向代理规则:
      server {
          listen 443 ssl;
          server_name 你的域名;
      
          ssl_certificate /path/to/your/cert.pem;
          ssl_certificate_key /path/to/your/privkey.pem;
      
          location / {
              proxy_pass http://localhost:3000;
              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. 重启Nginx:sudo systemctl restart nginx,再启动你的React应用。
  • 直接绑定443端口(不推荐,有安全风险):Linux系统中1024以下端口需要root权限,若一定要让应用直接监听443,可:
    1. 停止Nginx释放端口:sudo systemctl stop nginx
    2. 给Node进程添加绑定特权端口的能力,避免用root启动:
      sudo setcap 'cap_net_bind_service=+ep' /home/fsadmin/.nvm/versions/node/v16.13.1/bin/node
      
      之后用普通用户启动应用即可监听443端口。
  • 清理PM2残留进程:执行pm2 list找到残留进程,用pm2 delete 进程ID/进程名删除,或直接pm2 kill彻底清理后重启应用。
  • 确认SSL证书有效性:如果用Nginx处理HTTPS,确保证书文件路径正确且未过期;如果应用直接处理HTTPS,要在代码中正确配置证书和密钥文件路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 19:39:23