docker安装nginx支持ssl 实现https访问(完整版)

📅 2026/8/22 12:20:21
docker安装nginx支持ssl 实现https访问(完整版)
全文目录,一步到位1.前言简介1.1 专栏传送门1.1.1 本文简介2. docker安装nginx支持ssl2.0 准备ssl证书(例: 阿里云)2.0.1 配置域名解析2.0.2 找到数字证书管理服务并签发ssl证书2.0.3 选择默认证书 填写域名 创建2.0.4 提交审核, 签发成功2.0.5 解压并上传到宿主机ssl路径下2.1 安装docker(有跳过)2.2 linux的操作方式2.2.1 创建需要挂载的宿主机目录2.2.2 创建并启动nginx容器(普通版)2.2.3 容器复制nginx配置到宿主机2.2.4 删除nginx容器2.2.5 创建新nginx容器 配置ssl证书2.2.6 修改nginx.conf配置2.2.7 漏洞补充修复2.3 查看日志与容器方法2.3.1 查看容器日志2.3.2 检查目录挂载是否成功2.3.3 最终效果3. 文章的总结与预告3.1 本文总结1.前言简介1.1 专栏传送门 docker实用(安装/操作)专栏传送门 linux普通方式安装nginx并支持ssl 1.1.1 本文简介本文使用docker快速安装nginx并支持ssl证书包含ssl证书如何签发ssl证书下载docker启动容器步骤启动注意事项等2. docker安装nginx支持ssl2.0 准备ssl证书(例: 阿里云)2.0.1 配置域名解析2.0.2 找到数字证书管理服务并签发ssl证书2.0.3 选择默认证书 填写域名 创建数量用光了可以购买(操作错误删除也算一次)2.0.4 提交审核, 签发成功审核页面跳过签发成功后点击下载选择nginx2.0.5 解压并上传到宿主机ssl路径下看2.2.1 中创建文件夹 找到ssl文件夹放入即可2.1 安装docker(有跳过) 传送门: linux系统上安装docker2.2 linux的操作方式2.2.1 创建需要挂载的宿主机目录mkdir-p/usr/local/src/docker/nginx/{conf,html,logs,ssl}2.2.2 创建并启动nginx容器(普通版)随意启动一个nginx容器, 用于复制里面配置文件name:容器名字-p宿主机:容器-d容器在后台运行dockerrun--namenginx-p80:80-dnginx2.2.3 容器复制nginx配置到宿主机复制配置文件到宿主机路径 左是容器路径(docker) 右是宿主机路径(linux)dockercpnginx:/etc/nginx/nginx.conf /usr/local/src/docker/nginx/conf/dockercpnginx:/etc/nginx/conf.d /usr/local/src/docker/nginx2.2.4 删除nginx容器复制成功后nginx容器删除# 基础写法dockerstop nginxdockerrmnginx# 简化写法dockerrm-fnginx2.2.5 创建新nginx容器 配置ssl证书dockerrun--namenginx-p80:80-p443:443\-v/usr/local/src/docker/nginx/html:/usr/share/nginx/html\-v/usr/local/src/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf/\-v/usr/local/src/docker/nginx/conf.d:/etc/nginx/conf.d/\-v/usr/local/src/docker/nginx/logs:/var/log/nginx\-v/usr/local/src/docker/nginx/ssl:/etc/nginx/ssl\--privilegedtrue-d--restartalways nginx参数解释挂载到上面创建的路径下 左边是宿主机 右边是容器- name:容器名- p:映射端口: 容器端口-v:宿主机路径: 容器路径--privilegedtrue:使容器拥有root权限-d :后台运行--restartalways:自启动(docker启动后)nginx:指定镜像(没有会自动下载latest版本)2.2.6 修改nginx.conf配置ssl配置模板如下:(坑)特别注意: 配置路径必须是容器内的路径http{include /etc/nginx/mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout65;server_tokens off;include /etc/nginx/default.d/*.conf;server{listen80;#填写绑定证书的域名server_name test.*.cn;#把http的域名请求转成https相当于用户访问http也可以自动跳转到https避免出现网页提示不安全return301https://$host$request_uri;}server{listen443ssl;server_name mkdd.aisce.net;#证书文件名称ssl_certificate_key /etc/nginx/ssl/test.*.cn.key;#私钥文件名称 .crt和.pem都可以用ssl_certificate /etc/nginx/ssl/test.*.cn.pem;ssl_session_timeout 5m;ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;ssl_prefer_server_ciphers on;location /{root /usr/share/nginx/html;try_files$uri$uri/ /index.html;index index.html index.htm;}location /aaa/{proxy_set_header Host$http_host;proxy_set_header X-Real-IP$remote_addr;proxy_set_header REMOTE-HOST$remote_addr;proxy_set_header X-Forwarded-For$proxy_add_x_forwarded_for;proxy_pass http://localhost:9666/;}error_page500502503504/50x.html;location/50x.html{root html;}}}2.2.7 漏洞补充修复如果后端没有关闭swagger等 导致这些信息暴露公网/aaa转发#1.核心漏洞configKey 泄露初始密码 location~^/aaa/system/config/configKey{return403;}# 高危接口拦截同时匹配/xxx 和/prod-api/xxx 两种路径 location~*^/(aaa/)?(v3/api-docs|swagger-resources|druid|tool/|monitor/){return403;}更换新版本 ssl_protocols TLSv1.2 TLSv1.3;有的漏洞扫描会针对这个TLSv1 版本 换成高版本原来是: ssl_protocols TLSv1 TLSv1.1 TLSv1.2;版本号记得关闭# 1. 隐藏Nginx版本防止指纹探测server_tokens off;2.3 查看日志与容器方法2.3.1 查看容器日志cd/usr/local/src/docker/nginx/logsdockercontainer logs-faccess.logdockercontainer logs-ferror.log2.3.2 检查目录挂载是否成功进入容器控制台找到对应容器路径查看文件是否存在配置修改是否生效(基本都能生效, 不生效检查宿主机文件读写权限)dockerexec-itnginxbash2.3.3 最终效果[操作结束]3. 文章的总结与预告3.1 本文总结买域名会赠送免费的ssl证书 可以测试用证书现在是三个月过期审核, 等待 签发 下载nginx进行配置nginx.conf文件位置写容器路径千万不要写宿主机路径容器内也可以随意建立(mkdir)文件夹的 挂载目录对应上即可html文件夹完全可以不用, 可以参考(2-上条)总之灵活使用挂载的目的也是文件内容相互同步author: pingzhuyandescription: okyear: 2024