4.启用SSL证书
普通HTTP协议采用明文传输,容易被窃听、篡改,并不安全。因此我们需要SSL来解决这个问题。
我通过NPM(Nginx Proxy Manager)配置SSL证书。
NPM是一个运行在Docker容器中的可视化反向代理和SSL证书管理工具,接收外界对你的域名的访问,然后向内转发到你真正的运行服务的容器。
访问一个NPM配置SSL的HTTPS网站过程如下:
- 所有公网HTTPS请求通过宿主机的物理网卡进入,经端口映射后,被NPM接管。
- NPM 首先完成 SSL/TLS 终止(将加密的 HTTPS 请求解密为明文 HTTP 请求),然后通过自身的网络接口将该 HTTP 请求转发到自定义网桥。(veth pair 是 “容器” 和 “网桥” 之间的连接载体)
- 经过网桥后,网桥直接通过目标容器已接入的 veth pair,将明文请求投递到目标容器。
- 目标容器处理完请求后,将 HTTP 响应原路返回给 NPM,NPM 将该明文 HTTP 响应重新加密为 HTTPS 响应,最终经宿主机物理网卡返回给客户端。
配置过程:
- 创建自定义内部网络(若未创建):bash运行
docker network create wp_network - 修改 WordPress 的 docker-compose.yml 文件:
- 让 WordPress 容器接入上述自定义网络(wp_network);
- 移除 WordPress 容器的 80/443 端口映射(ports 字段),仅对同一网络内的 NPM 容器可见。
- 在目标目录创建 docker-compose.proxy.yml 文件(配置 NPM),文件需包含核心内容:
- 使用 NPM 官方镜像(jc21/nginx-proxy-manager:latest);
- 映射宿主机 80/443/81 端口到容器对应端口;
- 接入与 WordPress 相同的自定义网络(wp_network);
- 添加数据卷(./npm/data:/data、./npm/letsencrypt:/etc/letsencrypt),保证证书 / 配置持久化;具体模板可参考 NPM 官方文档或可靠教程。
- 使 WordPress 配置生效:在 WordPress 的 docker-compose.yml 所在目录执行:bash运行
docker-compose down # 停止并删除现有服务 docker-compose up -d # 重新启动服务 - 启动 NPM 服务:在 docker-compose.proxy.yml 所在目录执行终端命令:bash运行
sudo docker-compose -f docker-compose.proxy.yml up -d - 开放宿主机端口(防火墙 / 安全组):需开放 80、443、81 端口,以公网 Ubuntu 为例:bash运行
sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw allow 81/tcp sudo ufw reload - 配置 NPM 并申请 SSL 证书:
- 打开浏览器,访问 http:// 你的 VPS 公网 IP:81;
- 首次登录(默认账号:admin@example.com,密码:changeme),登录后立即修改密码;
- 点击 “Hosts> Proxy Hosts > Add Proxy Host”,填写:
- Domain Names:你的域名;
- Forward Hostname/IP:WordPress 容器名或 IP(如 wordpress);
- Forward Port:80;
- 切换到 “SSL” 标签页,选择 “Request a new SSL Certificate”,填写邮箱,勾选 “Force SSL”“HTTP/2 Support”,点击 “Save” 自动申请 Let’s Encrypt 证书。
完成以上步骤并确认证书申请成功后,你的 SSL(HTTPS)配置就完成了。
评论(0)
暂无评论