需要同时使用 Nginx + Tomcat 的典型场景


一、为什么需要两者配合?

组件擅长不擅长
Nginx静态文件、并发连接、负载均衡、反向代理跑 Java 程序
Tomcat跑 Java Web 应用(JSP/Servlet)处理高并发静态文件

结论:让 Nginx 处理它擅长的,Tomcat 处理它擅长的,两者配合达到最佳效果。


二、典型架构图

用户请求
    ↓
  Nginx(80/443端口)
    ↓
  ├── 静态文件(图片/CSS/JS)→ 直接返回
  ├── 动态请求(.jsp .do) → Tomcat(8080端口)
  ├── 负载均衡 → 多个Tomcat
  └── 缓存 → 减少Tomcat压力

三、具体场景举例

场景1:Java Web 项目 + 静态资源分离

server {
    listen 80;
    server_name example.com;

    # 静态文件由 Nginx 直接处理
    location /static/ {
        alias /var/www/static/;
        expires 30d;
    }

    # 图片由 Nginx 直接处理
    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
        root /var/www/html;
        expires 30d;
    }

    # 动态请求转发给 Tomcat
    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

场景2:负载均衡 + 多台 Tomcat

upstream tomcat_cluster {
    server 192.168.1.10:8080 weight=3;
    server 192.168.1.11:8080 weight=2;
    server 192.168.1.12:8080 backup;
}

server {
    listen 80;

    location / {
        proxy_pass http://tomcat_cluster;
        proxy_set_header Host $host;
    }
}

场景3:HTTPS 卸载(SSL终结)

server {
    listen 443 ssl;
    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;

    location / {
        proxy_pass http://127.0.0.1:8080;  # 转给Tomcat(HTTP)
    }
}

Nginx 处理 SSL 加密,Tomcat 不用处理 HTTPS,减轻负担。

场景4:动静分离 + 缓存

location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
    root /data/static;
    expires 7d;
    add_header Cache-Control "public";
}

location / {
    proxy_pass http://tomcat;
    proxy_cache my_cache;
    proxy_cache_valid 200 10m;
}

场景5:多域名/多应用代理

# 同一个 Nginx,背后多个 Tomcat 应用
server {
    listen 80;
    server_name app1.example.com;
    location / {
        proxy_pass http://127.0.0.1:8081;  # Tomcat1
    }
}

server {
    listen 80;
    server_name app2.example.com;
    location / {
        proxy_pass http://127.0.0.1:8082;  # Tomcat2
    }
}

四、Nginx 帮 Tomcat 做了什么

功能说明
静态文件处理Tomcat 处理静态文件很慢,Nginx 极快
负载均衡把请求分发给多个 Tomcat
SSL 终结Nginx 处理 HTTPS,Tomcat 只用 HTTP
缓存缓存静态内容甚至动态页面
压缩Gzip 压缩,减少带宽
限流防止 Tomcat 被冲垮
访问控制IP 黑白名单
日志访问日志由 Nginx 记录

五、性能对比

指标只用 TomcatNginx + Tomcat
静态文件并发50010000+
CPU 占用Tomcat 处理静态文件浪费 CPUNginx 轻量处理
SSL 性能一般极好(OpenSSL)
内存占用Tomcat 内存吃紧静态文件不占 Tomcat 内存

六、一句话总结

需要 Nginx + Tomcat 的场景:任何 Java Web 项目,尤其是需要高并发、静态资源多、负载均衡、SSL 加速的生产环境。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注