Nginx 作為高性能反向代理/負載均衡器(支撐 5 萬+ 並發),前置於 Tomcat 集群(單節點約 150-250 並發),實現流量分發、故障剔除、靜態資源分離,大幅提升系統吞吐與可用性。
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;
# IP Hash 解決 Session 粘性
# ip_hash;
# 最少連接
# least_conn;
# 故障自動剔除
# max_fails=3 fail_timeout=30s;
}
Tomcat 配置 AJP 連接器(port=8009),Nginx 使用 proxy_pass ajp://,相比 HTTP 協議減少解析開銷,提升 20-30% 吞吐。
location ~ .*\.(html|htm|gif|jpg|jpeg|png|css|js|ico)$ {
root /data/static;
expires 30d;
access_log off;
}
圖片、CSS、JS 直接由 Nginx 服務,毫秒級響應,釋放 Tomcat 處理動態請求。
| 方案 | 原理 | 優點 | 缺點 |
|---|---|---|---|
| Sticky Session (ip_hash) | 同一客戶端固定路由到同一 Tomcat | 簡單、無需代碼改造、性能好 | 節點掛掉 Session 丟失、擴容不均 |
| Session 複製 (DeltaManager) | Tomcat 間廣播同步 Session | 高可用、無單點 | 集群大時網絡風暴、內存壓力大 |
| Memcached/Redis 集中存儲 (MSM) | Session 外置到分佈式緩存 | 水平擴展、持久化、跨語言 | 增加網絡跳轉、需維護緩存集群 |
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:host1:11211,n2:host2:11211"
sticky="false"
sessionBackupAsync="false"
lockingMode="uriPattern:/app/*"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>