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

Docker Compose部署Node.js-Nginx-Vite项目遇PR_END_OF_FILE_ERROR求助

解决Docker Compose部署Node.js-Nginx-Vite HTTPS项目的连接错误问题

以下是针对你遇到的PR_END_OF_FILE_ERROR(Firefox)和ERR_CONNECTION_CLOSED(Chrome)错误的排查与解决步骤:

1. 修正容器间网络通信配置

  • Docker Compose默认创建专属桥接网络,容器间需通过服务名而非localhost通信。确认Nginx配置中的反向代理目标是否使用Node.js服务的Compose服务名(比如http://node-server:3000,而非localhost:3000)——单独运行时用localhost是因为容器共享主机网络,Compose中容器处于独立网络空间。
  • 确保Node.js服务的监听地址设置为0.0.0.0,而非127.0.0.1/localhost,容器内服务需监听所有网卡才能被其他容器访问。示例代码:
    https.createServer(options, app).listen(3000, '0.0.0.0');
    

2. 验证自签名证书的挂载与路径

  • 确认证书文件(.key和.pem)已通过Compose的volumes正确挂载到Node.js和Nginx容器内,且容器内的路径与代码/配置中指定的路径完全一致。比如Compose中Node服务的挂载配置:
    services:
      node-server:
        volumes:
          - ./certs:/app/certs # 本地certs目录挂载到容器内/app/certs
    
    则Node.js代码中读取证书的路径应为/app/certs/private.key和/app/certs/certificate.pem。
  • 在Node.js容器内执行证书有效性验证:
    openssl s_client -connect localhost:3000 # 替换为Node.js的HTTPS端口
    
    若输出中出现证书加载失败、格式错误等信息,需检查证书文件本身或挂载路径。

3. 检查Node.js HTTPS服务配置

  • 确保Node.js代码中正确加载证书并创建HTTPS服务器,示例代码:
    const https = require('https');
    const fs = require('fs');
    const express = require('express');
    const app = express();
    
    const sslOptions = {
      key: fs.readFileSync('/app/certs/private.key'),
      cert: fs.readFileSync('/app/certs/certificate.pem')
    };
    
    app.get('/api', (req, res) => {
      res.send('HTTPS API response');
    });
    
    https.createServer(sslOptions, app).listen(3000, '0.0.0.0', () => {
      console.log('Node.js HTTPS server running on port 3000');
    });
    
  • 确认Compose文件中Node服务的内部端口与代码监听端口一致,若通过Nginx反向代理,无需对外暴露Node服务端口(仅需容器间内部通信即可)。

4. 排查Nginx反向代理配置

  • 若Nginx反向代理到Node.js的HTTPS端口,需确保Nginx能处理HTTPS上游连接。测试环境可临时添加proxy_ssl_verify off;跳过证书验证(生产环境需配置证书信任):
    server {
      listen 443 ssl;
      server_name localhost;
    
      ssl_certificate /etc/nginx/certs/certificate.pem;
      ssl_certificate_key /etc/nginx/certs/private.key;
    
      location /api/ {
        proxy_pass https://node-server:3000;
        proxy_ssl_verify off; # 测试环境临时关闭验证
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
      }
    
      location / {
        proxy_pass http://vite-server:5173;
      }
    }
    
  • 确认Nginx容器已正确挂载证书文件到配置指定的路径(如/etc/nginx/certs/)。

5. 检查端口与防火墙

  • 执行netstat -tulpn | grep 443(Linux/macOS)或netstat -ano | findstr :443(Windows),确认443端口未被其他服务占用。
  • 检查Docker是否有权限使用HTTPS端口,部分系统需root权限或配置端口范围。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 19:06:31