Windows服务器下Docker部署Nginx并配置HTTPS的问题求助
排查与解决步骤
1. 修正Nginx证书路径错误
你的Nginx配置里,证书路径写的是/etc/letsencrypt/live/jethrothelion.com/...,但Certbot命令申请的是mydomain.com和www.mydomain.com,路径不匹配会导致Nginx无法加载SSL证书,HTTPS服务启动失败,只能走HTTP。
修改Nginx配置中的证书路径:
ssl_certificate /etc/letsencrypt/live/mydomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/mydomain.com/privkey.pem;
2. 确认Certbot证书生成成功
手动执行Certbot命令,检查证书是否正常生成:
docker-compose run --rm certbot certonly --webroot --webroot-path=/var/www/html --email sammy@jethrothelion.com --agree-tos --no-eff-email --force-renewal -d mydomain.com -d www.mydomain.com
执行后查看certbot-etc卷内的/etc/letsencrypt/live/mydomain.com/目录是否有证书文件。如果生成失败,检查:
- 域名是否正确解析到Windows服务器的公网IP
- 80端口是否可访问(用
curl http://mydomain.com/.well-known/acme-challenge/test测试,返回404即路径可达)
3. 检查Windows环境的网络与防火墙设置
- Windows Defender防火墙:确保放行80、443端口,可临时关闭防火墙测试(测试后重新开启)
- Docker端口映射:确认docker-compose里的端口绑定是
0.0.0.0:80:80和0.0.0.0:443:443(默认"80:80"就是绑定所有IP,若用WSL2后端的Docker,需确认WSL2与主机网络互通) - 路由器端口转发:确认转发的是Windows主机的内网IP,而非WSL2的虚拟IP(WSL2后端可切换Docker为Windows主机网络模式,或在WSL2内配置端口转发)
4. 修正WordPress站点URL
即便Nginx做了HTTP转HTTPS,若WordPress后台的站点URL还是HTTP,会导致跳转异常或显示HTTP。可通过两种方式修改:
- 登录WordPress后台,在
设置-常规里把WordPress地址(URL)和站点地址(URL)改成https://mydomain.com - 无法登录后台时,直接修改数据库:
docker-compose exec db mysql -u root -p # 输入数据库密码后执行以下命令 USE wordpress; UPDATE wp_options SET option_value = 'https://mydomain.com' WHERE option_name = 'siteurl' OR option_name = 'home';
5. 重启服务并检查日志
修改配置后重启所有服务:
docker-compose down docker-compose up -d
检查Nginx日志,确认是否存在证书加载错误:
docker-compose logs webserver
若日志显示SSL_CTX_use_certificate_chain_file() failed,回到步骤1和2重新排查证书问题。
内容的提问来源于stack exchange,提问作者jethrothelion
相关产品推荐
相关产品推荐

