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

Docker Compose部署Nginx代理服务器SSL证书配置失效问题排查

问题

项目部署在DigitalOcean Droplet上,包含Nginx、前端、API三个容器,原本运行正常。给Nginx添加SSL证书后,浏览器提示“无法访问此网站”。Nginx容器日志显示运行正常,之前证书路径错误会报错,已反复检查过证书路径。

docker-compose配置

services:
  clarbeast-frontend: 
    container_name: clarbeast-frontend
    build: 
      context: ./frontend 
      dockerfile: Dockerfile
    image: clarbeast-frontend

  clarbeast-api:
    container_name: clarbeast-api
    build: 
      context: ./api 
      dockerfile: Dockerfile
    image: clarbeast-api
      
  clarbeast-nginx:
    container_name: clarbeast-nginx
    build:
      context: ./nginx
      dockerfile: Dockerfile
    image: clarbeast-nginx
    ports:
      - "80:80"
    depends_on:
      - clarbeast-frontend
      - clarbeast-api
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
      - /root/nginx_bundle_5a52b057ab94.crt:/root/nginx_bundle_5a52b057ab94.crt
      - /root/example.com.key:/root/example.com.key

nginx.conf配置

events {}

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

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

        ssl_certificate /root/nginx_bundle_5a52b057ab94.crt;
        ssl_certificate_key /root/example.com.key;

        location / {
            proxy_pass http://clarbeast-frontend:3000;
        }
        location /api {
            proxy_pass http://clarbeast-api:9874;
        }
    }
}

排查方向

  • 端口未开放:docker-compose只映射了80端口,但Nginx现在监听443端口,必须在ports里添加"443:443";同时检查DigitalOcean的防火墙规则,确保443端口允许入站流量——这是最常见的疏忽,HTTP转HTTPS后浏览器会请求443,端口没开直接连不上。
  • 证书权限问题:容器内Nginx通常以nginx用户运行,你挂载的证书在/root目录,该目录默认仅限root用户访问,nginx用户读不了。可以把证书移到容器内的非root目录(比如/etc/ssl/certs/),修改nginx.conf里的路径,同时给证书文件设置644权限。
  • 证书有效性问题:检查证书是否过期,bundle证书是否包含完整的中间证书链。进入Nginx容器执行openssl x509 -in /root/nginx_bundle_5a52b057ab94.crt -text -noout,查看证书有效期和链完整性。
  • 后端连通性问题:进入Nginx容器,执行curl http://clarbeast-frontend:3000和curl http://clarbeast-api:9874/api,确认前端和API容器是否能正常响应,排除后端故障。
  • DNS解析问题:用nslookup example.com在本地测试域名解析,确认记录是否正确指向Droplet的IP,DNS缓存可能导致解析异常。
  • Nginx配置验证:在容器内执行nginx -t再次确认配置无语法错误;另外,可补充SSL基础配置(比如ssl_protocols、ssl_ciphers),部分环境下缺失这些会导致TLS握手失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 17:50:36