Docker Nginx HTTPS配置:二级域名无端口访问多Web项目指南
引言
在当今云原生与微服务架构盛行的背景下,企业或开发者常面临多Web项目部署的需求。通过Docker容器化技术结合Nginx反向代理,可高效实现HTTPS二级域名无端口访问,提升安全性与用户体验。本文将分步骤解析这一过程,确保读者能够实际落地。
一、技术背景与需求分析
1.1 技术选型依据
- Docker:提供轻量级容器化环境,隔离依赖,便于多项目并行部署。
- Nginx:高性能反向代理服务器,支持HTTPS、负载均衡及域名路由。
- HTTPS:通过SSL/TLS加密传输,保障数据安全,符合现代Web安全标准。
- 二级域名无端口访问:简化访问路径(如
project1.example.com而非example.com:8080),提升用户体验。
1.2 典型应用场景
- 企业内多个微服务前端项目独立部署。
- 个人开发者同时维护多个开源项目,需通过不同域名区分。
- 避免端口冲突,实现资源隔离与高效管理。
二、前期准备
2.1 域名与DNS配置
- 申请主域名:如
example.com,通过阿里云、腾讯云等注册。 - 配置二级域名DNS记录:
project1.example.com→ 指向服务器IP。project2.example.com→ 指向同一服务器IP。- 使用CNAME或A记录,确保DNS解析生效。
2.2 SSL证书申请
- Let’s Encrypt免费证书:
# 安装Certbotsudo apt install certbot python3-certbot-nginx# 申请证书(需提前配置Nginx监听80端口)sudo certbot --nginx -d project1.example.com -d project2.example.com
- 手动申请:通过DigiCert、GlobalSign等CA机构购买,下载证书文件(
.crt与.key)。
三、Docker与Nginx配置
3.1 Docker网络设置
- 创建自定义网络:
docker network create my_network
- 运行Web项目容器:
docker run -d --name project1 --network my_network -p 8081:80 your_project1_imagedocker run -d --name project2 --network my_network -p 8082:80 your_project2_image
- 注意:实际生产中应避免直接暴露端口,改用Nginx代理。
3.2 Nginx配置文件详解
- 主配置文件(
/etc/nginx/nginx.conf):http {include /etc/nginx/conf.d/*.conf;}
-
项目配置文件(
/etc/nginx/conf.d/project1.conf):server {listen 443 ssl;server_name project1.example.com;ssl_certificate /path/to/fullchain.pem;ssl_certificate_key /path/to/privkey.pem;location / {proxy_pass http://project1:80; # Docker容器名:端口proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}}
- 关键点:
ssl_certificate与ssl_certificate_key指向证书文件。proxy_pass指向Docker容器内部服务,无需暴露主机端口。
3.3 多项目配置示例
-
项目2配置(
/etc/nginx/conf.d/project2.conf):server {listen 443 ssl;server_name project2.example.com;ssl_certificate /path/to/fullchain.pem; # 可复用同一证书ssl_certificate_key /path/to/privkey.pem;location / {proxy_pass http://project2:80;proxy_set_header Host $host;}}
- HTTP转HTTPS重定向:
server {listen 80;server_name project1.example.com project2.example.com;return 301 https://$host$request_uri;}
四、部署与验证
4.1 启动Nginx与Docker
# 启动Nginxsudo systemctl start nginx# 启动Docker容器docker start project1 project2
4.2 验证访问
- 浏览器访问
https://project1.example.com与https://project2.example.com,应显示对应项目内容。 - 使用
curl测试:curl -I https://project1.example.com# 应返回200 OK及HTTPS相关信息
4.3 常见问题排查
- 502 Bad Gateway:检查Nginx错误日志(
/var/log/nginx/error.log),确认Docker容器是否运行。 - 证书无效:检查证书路径与权限,确保证书未过期。
- DNS解析失败:使用
nslookup project1.example.com验证DNS配置。
五、优化与扩展
5.1 性能优化
- Nginx缓存:对静态资源启用缓存。
location ~* \.(jpg|jpeg|png|css|js)$ {expires 30d;add_header Cache-Control "public";}
- 负载均衡:若项目有多个实例,配置
upstream模块。
5.2 安全加固
- 限制访问IP:
allow 192.168.1.0/24;deny all;
- 启用HTTP/2:
listen 443 ssl http2;
5.3 自动化部署
- 使用Docker Compose:
version: '3'services:project1:image: your_project1_imagenetworks:- my_networkproject2:image: your_project2_imagenetworks:- my_networknetworks:my_network:driver: bridge
- CI/CD集成:通过Jenkins、GitLab CI等自动化构建与部署。
六、总结
通过Docker容器化与Nginx反向代理,可高效实现HTTPS二级域名无端口访问多个Web项目。关键步骤包括:
- 配置DNS与SSL证书。
- 创建Docker网络并运行容器。
- 编写Nginx配置文件,实现域名路由与HTTPS加密。
- 验证访问并排查常见问题。
此方案适用于企业级多项目部署,兼顾安全性、可扩展性与维护性。读者可根据实际需求调整配置,如增加负载均衡、缓存策略等优化措施。