基于Docker部署Nginx并配置SSL证书的完整实践指南
海外云服务器 40个地区可选 亚太云服务器 香港 日本 韩国
云虚拟主机 个人和企业网站的理想选择 俄罗斯电商外贸虚拟主机 赠送SSL证书
在现代Web应用开发与部署中,安全性与可扩展性已成为不可忽视的核心需求,随着容器化技术的普及,Docker凭借其轻量、高效和跨平台的特性,成为部署Web服务的首选方案,而Nginx作为高性能的反向代理服务器和HTTP服务器,广泛用于负载均衡、静态资源服务以及HTTPS加密通信,本文将详细介绍如何使用Docker部署Nginx,并为其配置SSL证书,实现安全的HTTPS访问,帮助开发者构建一个稳定、安全且易于维护的Web服务环境。
准备工作:环境与工具
在开始之前,确保你的系统已安装Docker和Docker Compose(推荐使用),大多数Linux发行版、macOS以及Windows均可通过官方渠道安装Docker Desktop或Docker Engine,你需要一个域名,并已将其解析到你的服务器IP地址,SSL证书可以使用Let’s Encrypt免费获取,也可以使用商业证书。
创建项目目录结构
创建一个项目目录用于存放所有相关文件:
mkdir nginx-docker-ssl && cd nginx-docker-ssl mkdir certs logs html
certs/:用于存放SSL证书文件(如fullchain.pem和privkey.pem)logs/:存放Nginx访问日志和错误日志html/:存放网站静态文件
编写Nginx配置文件
在项目根目录下创建nginx.conf如下:
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name yourdomain.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name yourdomain.com;
ssl_certificate /etc/nginx/certs/fullchain.pem;
ssl_certificate_key /etc/nginx/certs/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512;
ssl_prefer_server_ciphers off;
root /usr/share/nginx/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
}
请将yourdomain.com替换为你的实际域名,该配置实现了HTTP到HTTPS的强制跳转,并启用了现代TLS协议和强加密套件,保障通信安全。
准备SSL证书
你可以使用Certbot从Let’s Encrypt获取免费SSL证书,在主机上执行以下命令(需暂时停止占用80端口的服务):
sudo certbot certonly --standalone -d yourdomain.com
成功后,证书将保存在/etc/letsencrypt/live/yourdomain.com/目录下,将fullchain.pem和privkey.pem复制到项目中的certs/目录:
cp /etc/letsencrypt/live/yourdomain.com/fullchain.pem ./certs/ cp /etc/letsencrypt/live/yourdomain.com/privkey.pem ./certs/
注意:私钥文件
privkey.pem权限应设置为600,避免泄露。
编写Docker Compose文件
在项目根目录创建docker-compose.yml文件:
version: '3.8'
services:
nginx:
image: nginx:alpine
container_name: nginx-ssl
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./certs:/etc/nginx/certs
- ./logs:/var/log/nginx
- ./html:/usr/share/nginx/html
restart: unless-stopped
该配置将本地的Nginx配置、证书、日志和网页文件映射到容器内部,确保配置持久化和日志可查。
启动服务
运行以下命令启动Nginx容器:
docker-compose up -d
等待容器启动后,访问 https://yourdomain.com,如果一切正常,浏览器将显示安全锁标志,表示SSL已生效。
自动更新SSL证书(可选)
Let’s Encrypt证书有效期为90天,建议配置自动续期,可在主机上添加cron任务:
0 3 * * 1 /usr/bin/certbot renew --quiet && docker cp /etc/letsencrypt/live/yourdomain.com/fullchain.pem nginx-ssl:/etc/nginx/certs/fullchain.pem && docker cp /etc/letsencrypt/live/yourdomain.com/privkey.pem nginx-ssl:/etc/nginx/certs/privkey.pem && docker exec nginx-ssl nginx -s reload
此脚本每周一凌晨3点检查证书是否需要更新,若更新成功,则复制新证书到容器并重载Nginx配置。
通过Docker部署Nginx并配置SSL证书,不仅简化了环境搭建过程,还提升了服务的可移植性和可维护性,结合Let’s Encrypt的免费证书机制,开发者可以零成本实现HTTPS加密通信,提升网站安全等级和用户信任度,本文提供的方案适用于个人博客、企业官网、API网关等多种场景,是现代Web部署的标准化实践之一。
还可进一步集成CI/CD流程,实现自动化部署与证书管理,构建更加智能化的运维体系,掌握Docker + Nginx + SSL的技术组合,将为你的Web服务保驾护航。


