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

切换至HTTPS后出现EADDRINUSE错误,求解决方案

解决React应用HTTPS切换后EADDRINUSE端口443占用问题

核心问题

你的React应用尝试绑定443端口,但该端口已被Nginx占用——Nginx是服务器上负责对外提供HTTPS服务的关键进程,直接杀死会导致网站无法访问,这也是你之前误操作后网站挂掉的原因。

解决方案

1. 修改React应用的监听端口(快速解决)

  • 开发环境:在启动命令中指定非特权端口(如3001),执行:
    PORT=3001 npm start
    
    或者修改package.json中的start脚本:
    "scripts": {
      "start": "PORT=3001 react-scripts start"
    }
    
  • 生产环境:如果用Node后端托管React,修改后端代码的监听端口(比如改成3000),避免占用443。

2. 配置Nginx反向代理(生产环境推荐方案)

让Nginx负责处理HTTPS请求和端口443的监听,将请求反向代理到你的React应用端口,这是生产环境的标准做法:

  1. 确保你的React应用(或其托管后端)监听非特权端口(如3000)。
  2. 编辑Nginx配置文件(通常路径为/etc/nginx/sites-available/your-domain.conf),添加反向代理规则:
    server {
        listen 443 ssl;
        server_name your-domain.com;
    
        # 保留原有的SSL证书配置
        ssl_certificate /path/to/your/ssl/cert.pem;
        ssl_certificate_key /path/to/your/ssl/key.pem;
    
        # 反向代理到React应用端口
        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 nginx -t
    
  4. 重启Nginx使配置生效:
    sudo systemctl restart nginx
    
  5. 启动你的React应用,此时用户访问https://your-domain.com时,Nginx会自动将请求转发到你的应用。

3. 让Node应用直接绑定443(不推荐)

如果一定要让Node应用直接使用443端口,可通过以下方式,但存在安全风险,不建议生产环境使用:

  • 用root用户启动应用(不推荐,权限过大易引发安全问题)。
  • 给Node进程授权绑定特权端口的权限:
    sudo setcap 'cap_net_bind_service=+ep' $(which node)
    

注意事项

Nginx是服务器上处理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 15:03:27