Java 放在 IIS/Nginx 后面:代理头、WebSocket 与内存
把 Tomcat 放在 IIS ARR 或 Nginx 后面,转发真实 Host/proto/客户端 IP,保持 WebSocket,并按证据设 JVM 内存。
测试环境Standard / Datacenter · 版本号 26100.33650 · x64
E1- 版本号
- 26100.33650
- 版本
- Standard / Datacenter
- 架构
- x64
- 支持
- 文档(E1)
- 证据
- E1官方文档
- 核验日期
- 2026-10-29
- 页面类型
- 任务
IIS/Nginx 终止 TLS,反代到 127.0.0.1:8080 的 Tomcat:
- 转发
Host、X-Forwarded-For、X-Forwarded-Proto; - 配 Tomcat
RemoteIpValve,应用才看到真实客户端; - 允许 WebSocket 升级和长读超时;
- JVM(
-Xms/-Xmx)和 Tomcat 线程数分开算。
location / { proxy_pass http://127.0.0.1:8080; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_read_timeout 60s;}WebSocket:
proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection $connection_upgrade;proxy_read_timeout 3600s;map $http_upgrade $connection_upgrade 放 http 块。
IIS ARR
Section titled “IIS ARR”- 服务器场指向
127.0.0.1:8080。 - 保留
Host;转发X-Forwarded-For/X-Forwarded-Proto。 - 长请求加大代理超时;需要时开 WebSocket。
- 不要把 Tomcat 8080 直接暴露公网。
Tomcat 看到代理
Section titled “Tomcat 看到代理”在 server.xml 的 Host 里启 RemoteIpValve:
<Valve className="org.apache.catalina.valves.RemoteIpValve" remoteIpHeader="x-forwarded-for" protocolHeader="x-forwarded-proto" protocolHeaderHttpsValue="https" />没有它,request.getRemoteAddr() 返回 127.0.0.1;连接器没配 scheme="https" 时 request.isSecure() 也可能为 false。
set "JAVA_OPTS=-Xms1g -Xmx1g -XX:+UseG1GC"- 专用内存服务器
-Xms=-Xmx,避免堆增长停顿。 - 给 Metaspace、线程栈、direct buffer 和 OS 留余量。
- Tomcat
maxThreads是请求并发,不是堆。加线程不修内存泄漏。 - 改数字前看 GC 日志和
jcmd <pid> GC.heap_info。
curl.exe -I https://lab.example/Get-Content C:\tomcat\logs\localhost.*.log -Tail 50jcmd <pid> VM.system_properties | Select-String "java.home|java.version"应用日志应显示真实客户端 IP 和 https;JVM 应是固定的 JDK。
E1。实验室没有跑 Tomcat 或 Java 应用;配置是 Server 2025 上待验证的代理模式。