You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

在Windows Server 2016上同端口运行多Tomcat实例的可行性及方案

在Windows Server 2016上通过URL路径分流运行多Tomcat实例的方案

当然可以实现你的需求!不过要明确一点:同一个端口不能被多个进程同时占用,所以直接让多个Tomcat监听同一个端口是行不通的。我们需要借助反向代理服务器来做请求转发,把443端口(HTTPS)的请求根据URL路径分配到不同的Tomcat实例上。下面是两种适合Windows Server 2016环境的可行方案:

方案一:用Windows自带的IIS+ARR实现

IIS是Windows Server默认的Web服务器,搭配ARR(Application Request Routing)模块就能轻松实现反向代理分流:

  • 第一步:安装IIS和ARR模块
    打开服务器管理器,通过「添加角色和功能」安装Web服务器(IIS);之后通过Web平台安装器搜索「Application Request Routing」并安装该模块。
  • 第二步:配置多个Tomcat实例的端口
    给每个Tomcat设置独立的HTTP监听端口,比如tomcat1用8081,tomcat2用8082。修改各自conf/server.xml里的<Connector>节点的port属性,同时注意把Server节点的port(默认8005)、AJP端口(默认8009)也改成不同值,避免实例间冲突。
  • 第三步:配置IIS反向代理规则
    1. 新建一个IIS网站,绑定443端口并配置好SSL证书;
    2. 进入该网站的「URL重写」功能,添加反向代理规则:
      • 规则1:匹配模式设为^app1/(.*),重写URL填写http://localhost:8081/app1/{R:1},勾选「启用反向代理」,按需调整主机头转发设置;
      • 规则2:匹配模式设为^app2/(.*),重写URL填写http://localhost:8082/app2/{R:1},同样启用反向代理。
        如果你的Tomcat应用部署在ROOT目录,重写URL可以改为http://localhost:8081/{R:1},这样https://example.com/app1就直接映射到tomcat1的ROOT应用。

方案二:用Nginx实现轻量反向代理

如果你偏好更轻量、配置灵活的代理工具,Nginx是不错的选择:

  • 第一步:下载Windows版Nginx,解压到服务器的任意目录;
  • 第二步:配置Tomcat实例的独立端口(同方案一,确保各实例端口不冲突);
  • 第三步:修改Nginx的conf/nginx.conf文件,配置HTTPS和路径分流规则:
    http块内添加如下server配置:
    server {
        listen 443 ssl;
        server_name example.com;
    
        ssl_certificate "C:/path/to/your/cert.pem";
        ssl_certificate_key "C:/path/to/your/cert.key";
    
        location /app1/ {
            proxy_pass http://localhost:8081/app1/;
            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;
        }
    
        location /app2/ {
            proxy_pass http://localhost:8082/app2/;
            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;
        }
    }
    
    保存配置后,通过命令start nginx.exe启动Nginx,测试请求是否能正确转发。

注意事项

  • 所有Tomcat实例的管理端口、AJP端口都要设置为不同值,避免启动冲突;
  • SSL证书只需要在代理服务器(IIS或Nginx)上配置即可,Tomcat内部可以只监听HTTP端口,降低配置复杂度;
  • 测试时建议先通过HTTP(80端口)验证分流规则是否生效,再切换到HTTPS环境。

内容的提问来源于stack exchange,提问作者user3175322

火山引擎 最新活动