Docker Nginx HTTPS二级域名无端口部署多Web项目全攻略

Docker Nginx HTTPS二级域名无端口访问多个Web项目全攻略

在当今的Web开发环境中,将多个Web项目部署在同一服务器上,并通过不同的二级域名(如project1.example.comproject2.example.com)进行无端口访问,同时保证HTTPS安全通信,已成为许多开发者和企业的需求。本文将详细介绍如何使用Docker和Nginx实现这一目标,为读者提供一套完整的解决方案。

一、环境准备

1.1 安装Docker与Docker Compose

首先,确保你的服务器上已安装Docker和Docker Compose。Docker提供了轻量级的容器化技术,而Docker Compose则简化了多容器应用的部署与管理。

  • 安装Docker:根据操作系统(如Ubuntu、CentOS等)的官方文档进行安装。
  • 安装Docker Compose:通常可以通过包管理器(如aptyum)或直接从GitHub下载二进制文件进行安装。

1.2 准备Web项目

准备两个或多个Web项目,可以是静态网站、Node.js应用、Python Flask/Django应用等。确保每个项目都能独立运行,并监听不同的端口(如3000、3001等)。

二、生成HTTPS证书

为了实现HTTPS访问,我们需要为每个二级域名生成SSL/TLS证书。这里推荐使用Let’s Encrypt提供的免费证书服务。

2.1 安装Certbot

Certbot是Let’s Encrypt官方推荐的客户端工具,用于自动化证书的申请与更新。

  1. # Ubuntu示例
  2. sudo apt update
  3. sudo apt install certbot python3-certbot-nginx

2.2 申请证书

使用Certbot为每个二级域名申请证书。假设你的域名是example.com,需要为project1.example.comproject2.example.com申请证书。

  1. # 为project1.example.com申请证书
  2. sudo certbot certonly --nginx -d project1.example.com
  3. # 为project2.example.com申请证书
  4. sudo certbot certonly --nginx -d project2.example.com

申请过程中,Certbot会要求你提供邮箱地址以接收证书过期提醒,并同意服务条款。

三、配置Nginx与Docker

3.1 创建Nginx配置文件

为每个二级域名创建独立的Nginx配置文件。以project1.example.com为例:

  1. # /etc/nginx/conf.d/project1.conf
  2. server {
  3. listen 80;
  4. server_name project1.example.com;
  5. return 301 https://$host$request_uri;
  6. }
  7. server {
  8. listen 443 ssl;
  9. server_name project1.example.com;
  10. ssl_certificate /etc/letsencrypt/live/project1.example.com/fullchain.pem;
  11. ssl_certificate_key /etc/letsencrypt/live/project1.example.com/privkey.pem;
  12. location / {
  13. proxy_pass http://project1_app:3000; # 假设project1运行在容器内的3000端口
  14. proxy_set_header Host $host;
  15. proxy_set_header X-Real-IP $remote_addr;
  16. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  17. proxy_set_header X-Forwarded-Proto $scheme;
  18. }
  19. }

同理,为project2.example.com创建类似的配置文件,只需修改server_namessl_certificatessl_certificate_keyproxy_pass等字段。

3.2 编写Docker Compose文件

使用Docker Compose来管理多个Web项目的容器。以下是一个示例docker-compose.yml文件:

  1. version: '3'
  2. services:
  3. project1_app:
  4. image: your_project1_image # 替换为你的项目镜像
  5. ports:
  6. - "3000:3000" # 仅用于调试,实际生产中应通过Nginx反向代理访问
  7. # 其他配置...
  8. project2_app:
  9. image: your_project2_image # 替换为你的项目镜像
  10. ports:
  11. - "3001:3001" # 同上
  12. # 其他配置...
  13. nginx:
  14. image: nginx:latest
  15. ports:
  16. - "80:80"
  17. - "443:443"
  18. volumes:
  19. - /etc/nginx/conf.d:/etc/nginx/conf.d # 挂载Nginx配置文件目录
  20. - /etc/letsencrypt:/etc/letsencrypt # 挂载证书目录
  21. depends_on:
  22. - project1_app
  23. - project2_app

3.3 启动容器

docker-compose.yml文件所在目录下执行以下命令启动容器:

  1. docker-compose up -d

这将后台启动所有定义的容器。

四、验证与测试

4.1 验证Nginx配置

执行以下命令检查Nginx配置是否正确:

  1. sudo nginx -t

4.2 访问Web项目

在浏览器中分别访问https://project1.example.comhttps://project2.example.com,确认能够正常访问且显示为HTTPS安全连接。

五、高级配置与优化

5.1 自动更新证书

Let’s Encrypt证书的有效期为90天,建议设置自动更新。可以使用Certbot的定时任务功能:

  1. sudo certbot renew --dry-run # 先进行干跑测试
  2. # 如果测试通过,可以设置定时任务
  3. echo "0 3 * * * /usr/bin/certbot renew --quiet" | sudo tee -a /etc/crontab

5.2 负载均衡与高可用

对于高流量网站,可以考虑在Nginx中配置负载均衡,将请求分发到多个后端服务器。此外,还可以使用Docker Swarm或Kubernetes等容器编排工具实现高可用部署。

5.3 安全加固

  • 定期更新Docker和Nginx到最新版本,以修复已知的安全漏洞。
  • 限制Nginx的访问日志,避免记录敏感信息。
  • 使用防火墙规则限制不必要的端口访问。

六、总结

通过本文的介绍,我们学习了如何使用Docker和Nginx实现HTTPS二级域名无端口访问多个Web项目。从环境准备、证书生成、Nginx配置到Docker Compose部署,每一步都至关重要。希望本文能为开发者提供一套实用的解决方案,助力高效部署与管理Web应用。