Docker Nginx HTTPS配置:二级域名无端口访问多Web项目指南

作者:热心市民鹿先生2025.10.31 10:59浏览量:3

简介:本文详细介绍了如何通过Docker与Nginx配置,实现HTTPS二级域名无端口访问多个Web项目的完整流程,涵盖证书申请、Nginx配置、Docker网络设置及多项目部署技巧。

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免费证书
    1. # 安装Certbot
    2. sudo apt install certbot python3-certbot-nginx
    3. # 申请证书(需提前配置Nginx监听80端口)
    4. sudo certbot --nginx -d project1.example.com -d project2.example.com
  • 手动申请:通过DigiCert、GlobalSign等CA机构购买,下载证书文件(.crt.key)。

三、Docker与Nginx配置

3.1 Docker网络设置

  • 创建自定义网络
    1. docker network create my_network
  • 运行Web项目容器
    1. docker run -d --name project1 --network my_network -p 8081:80 your_project1_image
    2. docker run -d --name project2 --network my_network -p 8082:80 your_project2_image
    • 注意:实际生产中应避免直接暴露端口,改用Nginx代理。

3.2 Nginx配置文件详解

  • 主配置文件/etc/nginx/nginx.conf):
    1. http {
    2. include /etc/nginx/conf.d/*.conf;
    3. }
  • 项目配置文件/etc/nginx/conf.d/project1.conf):

    1. server {
    2. listen 443 ssl;
    3. server_name project1.example.com;
    4. ssl_certificate /path/to/fullchain.pem;
    5. ssl_certificate_key /path/to/privkey.pem;
    6. location / {
    7. proxy_pass http://project1:80; # Docker容器名:端口
    8. proxy_set_header Host $host;
    9. proxy_set_header X-Real-IP $remote_addr;
    10. }
    11. }
    • 关键点
      • ssl_certificatessl_certificate_key指向证书文件。
      • proxy_pass指向Docker容器内部服务,无需暴露主机端口。

3.3 多项目配置示例

  • 项目2配置/etc/nginx/conf.d/project2.conf):

    1. server {
    2. listen 443 ssl;
    3. server_name project2.example.com;
    4. ssl_certificate /path/to/fullchain.pem; # 可复用同一证书
    5. ssl_certificate_key /path/to/privkey.pem;
    6. location / {
    7. proxy_pass http://project2:80;
    8. proxy_set_header Host $host;
    9. }
    10. }
  • HTTP转HTTPS重定向
    1. server {
    2. listen 80;
    3. server_name project1.example.com project2.example.com;
    4. return 301 https://$host$request_uri;
    5. }

四、部署与验证

4.1 启动Nginx与Docker

  1. # 启动Nginx
  2. sudo systemctl start nginx
  3. # 启动Docker容器
  4. docker start project1 project2

4.2 验证访问

  • 浏览器访问https://project1.example.comhttps://project2.example.com,应显示对应项目内容。
  • 使用curl测试:
    1. curl -I https://project1.example.com
    2. # 应返回200 OK及HTTPS相关信息

4.3 常见问题排查

  • 502 Bad Gateway:检查Nginx错误日志/var/log/nginx/error.log),确认Docker容器是否运行。
  • 证书无效:检查证书路径与权限,确保证书未过期。
  • DNS解析失败:使用nslookup project1.example.com验证DNS配置。

五、优化与扩展

5.1 性能优化

  • Nginx缓存:对静态资源启用缓存。
    1. location ~* \.(jpg|jpeg|png|css|js)$ {
    2. expires 30d;
    3. add_header Cache-Control "public";
    4. }
  • 负载均衡:若项目有多个实例,配置upstream模块。

5.2 安全加固

  • 限制访问IP
    1. allow 192.168.1.0/24;
    2. deny all;
  • 启用HTTP/2
    1. listen 443 ssl http2;

5.3 自动化部署

  • 使用Docker Compose
    1. version: '3'
    2. services:
    3. project1:
    4. image: your_project1_image
    5. networks:
    6. - my_network
    7. project2:
    8. image: your_project2_image
    9. networks:
    10. - my_network
    11. networks:
    12. my_network:
    13. driver: bridge
  • CI/CD集成:通过Jenkins、GitLab CI等自动化构建与部署。

六、总结

通过Docker容器化与Nginx反向代理,可高效实现HTTPS二级域名无端口访问多个Web项目。关键步骤包括:

  1. 配置DNS与SSL证书。
  2. 创建Docker网络并运行容器。
  3. 编写Nginx配置文件,实现域名路由与HTTPS加密。
  4. 验证访问并排查常见问题。

此方案适用于企业级多项目部署,兼顾安全性、可扩展性与维护性。读者可根据实际需求调整配置,如增加负载均衡、缓存策略等优化措施。