跳转至

单机环境下双Nginx网关分层架构搭建验证

1 为什么需要双Nginx

在当前容器化与微服务流行趋势下,单一网关难以兼顾流量治理与业务解耦。双Nginx架构通过外层网关(SSL卸载、限流、访问控制)与内层容器Nginx(业务路由、静态服务)分层,实现职责分离与故障隔离。

本文基于单台宿主机演示:外层Nginx直接安装,内层Nginx运行于Docker容器,验证双层协同工作逻辑。

2 请求链路(单机版)

用户请求流转路径:

  1. 用户 → HTTPS → 外层Nginx(宿主机)

  2. 外层 → HTTP → 127.0.0.1:7000(Docker映射端口)

  3. 内层Nginx容器 → 后端应用

  4. 响应原路返回

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. 测试请求

curl -I https://ip.puretool.cn

2. 查看外层日志

tail -f /var/log/nginx/ip.puretool.cn_access.log

3. 查看内层日志

docker exec -it nginx-proxy tail -f /var/log/nginx/access.log

4. 用户终端访问效果

5 扩展:完整流量治理链

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