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
相关产品推荐
相关产品推荐

