Nginx反向代理Tomcat实战指南

发布于:2025-08-17 ⋅ 阅读:(16) ⋅ 点赞:(0)

在生产环境中,直接将Tomcat服务器暴露给外部网络并不是最佳实践。通过使用反向代理服务器(如Nginx或Apache HTTP Server),可以提高安全性、性能和灵活性。本文将介绍如何结合Nginx作为反向代理来部署Tomcat应用。

结合反向代理实现 Tomcat 部署

可以利用iptables策略实现端口重定向或DNAT,解决非标准端口的问题

iptables -t nat -A PREROUTING -p tcp --dport 80 --j REDIRECT --to-port 8080

但无法实现负载均衡

常见部署方式介绍

在这里插入图片描述

standalone模式,Tomcat单独运行,直接接受用户的请求,不推荐
反向代理,单机运行,提供了一个Nginx作为反向代理,可以做到静态由nginx提供响应,动态jsp 代理给Tomcat

  • LNMT:Linux + Nginx + MySQL + Tomcat
  • LAMT:Linux + Apache(Httpd)+ MySQL + Tomcat
    前置一台Nginx,给多台Tomcat实例做反向代理和负载均衡调度,Tomcat上部署的纯动态页面更适合
  • LNMT:Linux + Nginx + MySQL + Tomcat
    多级代理
  • LNNMT:Linux + Nginx + Nginx + MySQL + Tomcat

利用 Nginx 反向代理至同一个主机的 Tomcat

配置说明
在这里插入图片描述
利用nginx反向代理功能,实现上图的代理功能,将用户请求全部转发至指定的同一个tomcat主机
利用nginx指令proxy_pass 可以向后端服务器转发请求报文,并且在转发时会保留客户端的请求报文中的 host首部

[root@ubuntu2404 ~]#apt install -y nginx
[root@ubuntu2404 ~]#vim /etc/nginx/conf.d/www.caoge.conf
upstream tomcat {
   
   
        server 192.168.1.30:8080;
        server 192.168.1.40:8080;

}
server{
   
   
        listen 80;
        server_name www.caoge.com;
        location / {
   
   
        proxy_pass http://tomcat;
}
}
[root@ubuntu2404 ~]#nginx -t
[root@ubuntu2404 ~]#systemctl restart nginx
[root@ubuntu2404 ~]#vim /etc/hosts
192.168.1.20 www.caoge.com

实战案例1:实现 HTTP

环境说明

一台主机,实现nginx和tomcat
tomcat上有两个新机器当node1,node2
[root@nginx ~]#apt install nginx

[root@node1 ~]#apt install -y tomcat10
[root@node1 ~]#apt install -y openjdk-21-jdk
[root@node2 ~]#apt install -y tomcat10
[root@node2 ~]#apt install -y openjdk-21-jdk

#修改nginx.conf配置文件
[root@nginx ~]#vim /etc/nginx/conf.d/tomcat.conf
server{
   
   
        listen 80;
        server_name node1.caoge.com;


location / {
   
   
        proxy_pass http://192.168.1.70:8080;     
}
}
[root@nginx ~]#systemctl restart nginx.service 

[root@nginx ~]#vim /etc/hosts
192.168.1.60 node1.caoge.com
[root@nginx ~]#curl http://node1.caoge.com
node1

[root@nginx ~]#vim /etc/nginx/conf.d/tomcat.conf
server{
   
   
        listen 80;
        server_name node1.caoge.com;


location / {
   
   
        proxy_pass http://192.168.1.80:8080;     
}
}
[root@nginx ~]#systemctl restart nginx.service 

[root@nginx ~]#curl http://node1.caoge.com
node2
[root@nginx ~]#vim /etc/nginx/conf.d/tomcat.conf
upstream tomcat {
   
   
                server 192.168.1.80:8080;
                server 192.168.1.70:8080;

}       
server{
   
   
        listen 80;
        server_name node1.caoge.com;
location / {
   
   
        proxy_pass http://tomcat;           
}
}
[root@nginx ~]#systemctl restart nginx.service 
[root@nginx ~]#curl http://node1.caoge.com
node2
[root@nginx ~]#curl http://node1.caoge.com
node1

实战案例2:实现 HTTPS

tomcat 实现 https的参考文档

https://help.aliyun.com/document_detail/98576.html?spm=5176.b657008.0.0.5a471b48Cyahpi

虽然在Tomcat上可以实现HTTPS,不仅配置复杂,而且会导致性能问题,因此生产中更多的是通过Nginx 实现HTTPS再反向代理至Tomcat

Nginx实现反向代理实现 http 自动跳转至 https

server {
   
   
 listen 80;
 server_name blog.wang.org;
 return 302 https://$host$request_uri;
}
server {
   
   
 listen 443 ssl;
 server_name blog.wang.org;
 ssl_certificate   /etc/nginx/ssl/www.wang.org.pem;
 ssl_certificate_key /etc/nginx/ssl/www.wang.org.key;
 location / {
   
   
 proxy_pass http://127.0.0.1:8080;
 proxy_set_header Host  $http_host;
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 }
}

Nginx实现反向代理实现 http 自动跳转至 https 并同时实现动静分离


网站公告

今日签到

点亮在社区的每一天
去签到