单机环境下双Nginx网关分层架构搭建验证¶
1 为什么需要双Nginx¶
在当前容器化与微服务流行趋势下,单一网关难以兼顾流量治理与业务解耦。双Nginx架构通过外层网关(SSL卸载、限流、访问控制)与内层容器Nginx(业务路由、静态服务)分层,实现职责分离与故障隔离。
本文基于单台宿主机演示:外层Nginx直接安装,内层Nginx运行于Docker容器,验证双层协同工作逻辑。
2 请求链路(单机版)¶

用户请求流转路径:
-
用户 → HTTPS → 外层Nginx(宿主机)
-
外层 → HTTP →
127.0.0.1:7000(Docker映射端口) -
内层Nginx容器 → 后端应用
-
响应原路返回
3 关键配置¶
3.1 外层Nginx(宿主机)¶
功能:SSL终止、转发至本机容器端口。
配置文件部分摘录如下:
# 文件路径:../conf.d/multi-app.conf
server {
listen 443 ssl;
server_name ip.puretool.cn;
ssl_certificate /etc/letsencrypt/live/ip.puretool.cn/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ip.puretool.cn/privkey.pem;
location / {
proxy_pass http://127.0.0.1:7000;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

3.2 内层Nginx(容器)¶
容器创建:
networks:
app-common:
external: true
volumes:
nginx-www:
name: nginx-www
services:
nginx-proxy:
image: nginx:alpine
environment:
- TZ=Asia/Shanghai
container_name: nginx-proxy
restart: unless-stopped
networks:
- app-common
ports:
# 只暴露给宿主机,不对外网开放
- "127.0.0.1:7000:80" # 静态网站(ip.puretool.cn、www.leicong.net、www.itylq.com等)
- "127.0.0.1:7001:80" # Trilium路由
- "127.0.0.1:7002:80" # WebDAV路由
# - "127.0.0.1:700N:80" # 其他应用组(如需多个独立端口)
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
- ./conf.d:/etc/nginx/conf.d:ro
- ./redirect.map:/etc/nginx/redirect.map # ITYLQ重定向文件
- ./logs:/var/log/nginx
- nginx-www:/www
Nginx配置(容器内):
配置文件部分摘录如下:
server {
listen 80;
server_name ip.puretool.cn; # 与网关域名保持一致
index index.html index.htm;
root /www/ip.puretool.cn;
# 其他 location 配置...
location / {
try_files $uri $uri/ /index.html;
}
# 禁止访问敏感文件
location ~* (\.user.ini|\.htaccess|\.htpasswd|\.env.*) {
return 404;
}
error_page 404 /404.html;
}
4 验证¶
1. 测试请求

2. 查看外层日志

3. 查看内层日志

4. 用户终端访问效果

5 扩展:完整流量治理链¶

双Nginx广泛用于生产环境,常嵌入更大流量体系,如用于边缘加速、隐藏源站的CDN,防注入和过滤恶意流量的WAF,热点数据缓存Redis,和实时监控Docker容器运行状态的Prometheus等等,因篇幅有限就不一一展开了。如对Linux应用实战部署感兴趣,欢迎关注哦,后续将更新更多相关内容。