温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java tomcat如何集成nginx

发布时间:2026-09-22 14:25:00 来源:亿速云 阅读:84 作者:小樊 栏目:编程语言

在 Java Web 项目中,Tomcat 通常作为应用服务器(处理 JSP / Servlet / Spring 等 Java 请求),而 Nginx 作为反向代理服务器(处理静态资源、负载均衡、HTTPS 等)。下面从架构、配置、常见用法三个方面说明如何集成。


一、整体架构(推荐方式)

客户端
  ↓
Nginx(80 / 443)
  ↓ 反向代理
Tomcat(8080)
  • Nginx:对外暴露 80/443
  • Tomcat:仅监听内网 8080
  • 静态资源(js/css/img):由 Nginx 直接处理
  • 动态请求(/api、/*.do、JSP):转发给 Tomcat

二、Tomcat 基本配置(不需要大改)

1. 修改 Tomcat 端口(可选)

conf/server.xml

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />

Tomcat 不需要直接对外网开放 8080。


三、Nginx 反向代理配置(核心)

1. 基础反向代理

server {
    listen 80;
    server_name www.example.com;

    location / {
        proxy_pass http://127.0.0.1:8080;
        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;
    }
}

✅ 此时访问 http://www.example.com 等价于 http://localhost:8080


2. 静态资源由 Nginx 处理(性能优化)

location ~* \.(js|css|png|jpg|gif|ico|html)$ {
    root /opt/tomcat/webapps/ROOT;
    expires 30d;
}

动态请求仍然转发 Tomcat:

location / {
    proxy_pass http://127.0.0.1:8080;
}

3. 只代理 Java 请求(更规范)

location /api/ {
    proxy_pass http://127.0.0.1:8080/;
}

location / {
    root /opt/tomcat/webapps/ROOT;
    index index.html;
}

四、HTTPS(Nginx 处理 SSL,Tomcat 不用配)

Nginx 配置 HTTPS

server {
    listen 443 ssl;
    server_name www.example.com;

    ssl_certificate     /etc/nginx/ssl/example.crt;
    ssl_certificate_key /etc/nginx/ssl/example.key;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header X-Forwarded-Proto https;
    }
}

Tomcat 中可通过:

request.getScheme(); // https

正确识别协议。


五、Tomcat 中获取真实 IP(重要)

在 server.xml 中启用:

<Valve className="org.apache.catalina.valves.RemoteIpValve"
       remoteIpHeader="X-Forwarded-For"
       protocolHeader="X-Forwarded-Proto" />

否则 Java 中拿到的 IP 永远是 127.0.0.1


六、负载均衡(多 Tomcat)

upstream tomcat_cluster {
    server 127.0.0.1:8080;
    server 127.0.0.1:8081;
}

server {
    location / {
        proxy_pass http://tomcat_cluster;
    }
}

七、常见坑

❌ Tomcat 和 Nginx 同时监听 80
✅ 只让 Nginx 监听 80/443

❌ Java 中 request.getRemoteAddr() 是 127.0.0.1
✅ 使用 X-Forwarded-For

❌ 静态资源走 Tomcat
✅ 静态资源交给 Nginx


八、总结一句话

Nginx 负责“门面”,Tomcat 负责“业务”

如果你愿意,我可以:

  • 给你一份 Spring Boot + Nginx 完整配置
  • 或 Docker + Nginx + Tomcat 示例
  • 或 生产环境最优 Nginx 配置模板

你现在是 传统 Tomcat 项目 还是 Spring Boot?

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手