准备证书文件
准备.crt和.key文件,上传到服务器。可以上传zip包,然后unzip cert.zip -d /opt解压至目标目录。
进入Nginx容器内配置证书
将证书拷贝到容器内
使用docker cp命令将证书复制到容器内
ini
docker cp [本地路径] [容器名/容器ID]:[容器内目标路径]
如:docker cp /opt/cert/ my-nginx:/etc/nginx/cert/
容器的名字和id可以通过docker container ps查看,如果容器已经停止,可以增加参数-a。
配置nginx配置文件
ini
server {
listen 443;
server_name www.trustauth.cn; #证书绑定的网站域名
ssl on;
ssl_certificate cert/www.trustauth.cn_chain.crt; #证书公钥
ssl_certificate_key cert/www.trustauth.cn.key; #证书私钥
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!3DES:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
root html; #站点目录
index index.html index.htm;
}
}
可以使用nginx -t检查配置是否正确,如果一切顺利,可以nginx -s reload重启服务。

常见错误
ssl配置错误
ssl配置报错unknown directive "ssl":
确认 Nginx 是否缺少 SSL 模块
首先通过 Nginx 内置命令,查看已编译的模块列表,判断是否缺少 ssl_module:
bash
# 查看 Nginx 已编译模块(关键看是否有 --with-http_ssl_module)
nginx -V # 注意是大写 V,小写 v 只显示版本号
若输出中包含 --with-http_ssl_module:说明已启用 SSL 模块,问题可能是配置文件语法错误。
修改ssl配置语法
如果nginx版本>1.15,不需要使用ssl指令:
diff
- listen 443;
- ssl on
+ listen 443 ssl
无法访问443端口
nginx能正常启动,80端口能访问,443无法访问,可能原因有:
- 容器未开放443端口
- 主机安全组策略未开放443端口
项目内部分链接失效
浏览器限制https网页无法请求http资源,需要检查全部请求连接,是否有指向http的
docker-compose挂载卷
进入容器内配置证书,在容器重建(重启restart不影响)后会恢复原样,可以使用卷挂载这些配置
bash
docker run -d \
--name my-nginx \
-p 80:80 \ # HTTP 端口映射
-p 443:443 \ # HTTPS 端口映射(关键)
-v /宿主机/nginx/conf:/etc/nginx/conf.d \ # 挂载配置目录
-v /宿主机/nginx/ssl:/etc/nginx/ssl \ # 挂载 SSL 证书
nginx
也可以在docker-compose文件中增加配置
bash
services:
nginx:
image: nginx
ports:
- "80:80"
- "443:443" # 新增/确认这一行
volumes:
- ./conf:/etc/nginx/conf.d
- ./ssl:/etc/nginx/ssl