简介:本文详细介绍了如何通过Docker与Nginx配置,实现HTTPS二级域名无端口访问多个Web项目的完整流程,涵盖证书申请、Nginx配置、Docker网络设置及多项目部署技巧。
在当今云原生与微服务架构盛行的背景下,企业或开发者常面临多Web项目部署的需求。通过Docker容器化技术结合Nginx反向代理,可高效实现HTTPS二级域名无端口访问,提升安全性与用户体验。本文将分步骤解析这一过程,确保读者能够实际落地。
project1.example.com而非example.com:8080),提升用户体验。example.com,通过阿里云、腾讯云等注册。project1.example.com → 指向服务器IP。project2.example.com → 指向同一服务器IP。
# 安装Certbotsudo apt install certbot python3-certbot-nginx# 申请证书(需提前配置Nginx监听80端口)sudo certbot --nginx -d project1.example.com -d project2.example.com
.crt与.key)。
docker network create my_network
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
/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容器内部服务,无需暴露主机端口。项目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;}}
server {listen 80;server_name project1.example.com project2.example.com;return 301 https://$host$request_uri;}
# 启动Nginxsudo systemctl start nginx# 启动Docker容器docker start project1 project2
https://project1.example.com与https://project2.example.com,应显示对应项目内容。curl测试:
curl -I https://project1.example.com# 应返回200 OK及HTTPS相关信息
/var/log/nginx/error.log),确认Docker容器是否运行。nslookup project1.example.com验证DNS配置。
location ~* \.(jpg|jpeg|png|css|js)$ {expires 30d;add_header Cache-Control "public";}
upstream模块。
allow 192.168.1.0/24;deny all;
listen 443 ssl http2;
version: '3'services:project1:image: your_project1_imagenetworks:- my_networkproject2:image: your_project2_imagenetworks:- my_networknetworks:my_network:driver: bridge
通过Docker容器化与Nginx反向代理,可高效实现HTTPS二级域名无端口访问多个Web项目。关键步骤包括:
此方案适用于企业级多项目部署,兼顾安全性、可扩展性与维护性。读者可根据实际需求调整配置,如增加负载均衡、缓存策略等优化措施。