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

前端HTTPS访问后端API出现ERR_SSL_PROTOCOL_ERROR问题求助

问题:HTTPS前端访问后端接口报SSL协议错误

报错信息

控制台报错:

GET https://my_domain.com:8082/api/start net::ERR_SSL_PROTOCOL_ERROR

配置文件

Nginx 配置(nginx.conf)

server {
    listen 80;
    server_name my_domain.com www.my_domain.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl;
    server_name my_domain.com www.my_domain.com;

    root /usr/share/nginx/html;
    index index.html;

    ssl_certificate /etc/nginx/ssl/certificate.crt;
    ssl_certificate_key /etc/nginx/ssl/private.key;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:HIGH:!aNULL:!MD5;

    # API Backend proxy
    location /api/ {
        proxy_pass http://backend:8082;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        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;
    }

    location / {
        try_files $uri $uri/ /index.html;
    }

    error_page 404 /index.html;
}

Docker Compose 配置

services:
  frontend:
    build:
     context: ./frontend
     args:
      NGINX_CONF: ${NGINX_CONF}
#    network_mode: host
#    depends_on:
#      - backend
    ports:
      - '80:80'
      - "443:443"
    volumes:
      - ./frontend/ssl:/etc/nginx/ssl
    environment:
      - ENVIRONMENT=${ENVIRONMENT}
  backend:
    build:
     context: ./backend
     args:
      CONFIG: ${CONFIG}
    ports:
      - '8082:8082'
      - '8443:8443'
    volumes:
      - ./frontend/ssl:/etc/nginx/ssl
    environment:
      - ENVIRONMENT=${ENVIRONMENT}

networks:
  app-network:
    driver: bridge

排查情况

使用curl http://my_domain:8082/api/start可正常响应,但前端HTTPS访问带端口的地址报错。


解决方案

1. 修正前端API请求路径

核心问题:后端8082端口运行的是HTTP服务,不支持SSL协议,前端直接用https://my_domain.com:8082/api/start访问会触发SSL握手失败。

你已经在Nginx配置了/api/路径反向代理到后端,所以需要把前端API请求地址改成:

  • 相对路径:/api/start(推荐,自动适配当前域名和协议)
  • 绝对路径:https://my_domain.com/api/start

2. 确保Docker网络连通

当前Docker Compose定义了app-network但未将服务加入,导致Nginx无法通过http://backend:8082访问后端容器。修改Docker Compose配置,给两个服务添加网络关联:

services:
  frontend:
    # ... 现有配置
    depends_on:
      - backend  # 解除注释,确保后端先启动
    networks:
      - app-network  # 加入自定义网络
  backend:
    # ... 现有配置
    networks:
      - app-network  # 加入自定义网络

networks:
  app-network:
    driver: bridge

3. 安全优化(可选)

既然通过Nginx反向代理访问后端,无需暴露8082端口给外部,删除后端的8082:8082端口映射:

backend:
    ports:
      - '8443:8443'  # 仅保留需要外部访问的端口(如果不需要也可删除)

4. 重启服务验证

执行命令重启所有服务:

docker-compose down && docker-compose up -d --build

重新访问前端并测试接口,确认报错消失。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 05:14:58