Skip to content

nginx反向代理多个Tomcat服务

需求

单位5个IP,每个IP部署了一个Tomcat。由于我们有超过5个域名,并且逐渐采用springboot的Jar包部署,IP不够用啦。
为了跟领导解释这不是问题,我用Nginx做一个反向代理实验,来向领导证明。

总结需求

一台服务器,一个ip,多个项目,多个域名
本需求场景网络请求结构如下图:

解决思路

  1. 首先登录域名管理后台,一般服务商都提供dns服务,在里边把这些域名都映射到这个ip 这样外部请求都会访问服务器的80端口
  2. 用nginx监听80端口,并反向代理到其他端口

具体步骤

  1. 安装nginx 下载地址:nginx: download 下载后解压运行exe即可,然后访问localhost验证一下,正常应该显示nginx欢迎页。
  2. 配置host文件,来模拟dns服务,用做测试,host位置在:C:\WINDOWS\system32\drivers\etc,我们添加这两行
127.0.0.1  www.ilovejava.com
127.0.0.1  www.ilovepython.com

保存后,访问这两个域名验证一下设置是否有效,有效会显示nginx欢迎页。(注意设置完host文件后需要重启浏览器才能生效) 3. 安装tomcat :dowload,解压两份,一个重命名java,修改端口8080为8081,8005为8006,一个重命名python,修改端口8080为8082,8005为8007,配置tomcat端口的方法为https://blog.csdn.net/qq_40180411/article/details/82112344,然后启动。 4. 做两个测试用的项目:在tomcatjava的webapps文件夹中,创建文件夹,命名java,创建一个index.html。然后测试访问 http://127.0.0.1:8081/java/index.html

html
<!-- index.html -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>I love JAVA</title>
</head>
<body>
    <h1>I love JAVA</h1>
</body>
</html>

在tomcatpython中的webapps文件夹中,创建文件夹命名为PYTHON,并创建一个index.html,然后测试访问 http://127.0.0.1:8082/python/index.html

html
<!-- index.html -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>I love Python</title>
</head>
<body>
    <h1>I love Python</h1>
</body>
</html>
  1. 配置nginx,记事本打开nginx根目录conf/nginx.conf。将原来的server{...}部分删掉,插入以下代码。保存,重启nginx进程。
nginx
	server {  
        listen       80;  
        server_name  *.ilovejava.com;
  
        location / {  
            proxy_pass   http://127.0.0.1:8081/java/;
            index  index.html index.htm;  
        }       
    }  
	server {  
        listen       80;  
        server_name  *.ilovepython.com;
  
        location / {  
            proxy_pass   http://127.0.0.1:8082/python/;
            index  index.html index.htm;  
        }       
    }

验证一下,两个域名都能独立访问啦!