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

Docker环境下Nginx SSL反向代理失效,求助排查问题根源

问题定位与解决方案

你的问题核心有两个:一是Nginx未加载自定义配置导致80端口返回默认页面,二是证书路径权限问题导致443端口未监听。

关键原因分析

  1. 自定义配置未被加载:nginx:1.23.3-alpine镜像的默认主配置/etc/nginx/nginx.conf中,仅包含include /etc/nginx/conf.d/*.conf;,并未配置加载sites-enabled目录。你挂载的配置文件放在sites-enabled下,Nginx根本没读取到,所以80端口使用的是镜像自带的conf.d/default.conf,返回默认页面。
  2. 证书路径权限不足:Nginx容器内默认以nginx用户运行,/root目录权限为700,nginx用户无法访问该目录下的文件。即使证书文件权限正常,目录级别的权限限制导致SSL证书无法读取,443端口的server块加载失败,因此Nginx不监听443端口。

修改后的配置

docker-compose.yml

version: "3.8"

services:
  nginx:
    image: nginx:1.23.3-alpine
    restart: on-failure:3
    container_name: proxy

    volumes:
      # 将配置文件挂载到conf.d目录,确保被默认主配置加载
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
      # 将证书挂载到Nginx可访问的目录
      - ./nginx/ssl/crt.crt:/etc/nginx/ssl/crt.crt:ro
      - ./nginx/ssl/key.key:/etc/nginx/ssl/key.key:ro

    ports:
      - 80:80
      - 443:443

Nginx配置文件(default.conf)

server {
  listen 80;
  server_name   _;
  return 301 https://$host$request_uri;
}

server {
  listen 443 ssl http2;
  listen [::]:443 ssl http2;

  server_name localhost;

  # 修改证书路径到Nginx可访问的目录
  ssl_certificate /etc/nginx/ssl/crt.crt;
  ssl_certificate_key /etc/nginx/ssl/key.key;

  location / {
    proxy_pass http://localhost:50000;
    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;
  }
}

验证步骤

  1. 重启容器:
docker-compose down && docker-compose up -d
  1. 检查配置有效性:
docker exec proxy nginx -t
  1. 确认端口监听:
docker exec proxy netstat -lntp
  1. 测试跳转与代理:
# 测试HTTP转HTTPS
curl http://localhost
# 测试HTTPS代理(自签证书需加-k参数)
curl -k https://localhost

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 04:45:46