如何运行多个带嵌入式Tomcat且对应不同域名的Spring Boot Web应用
多域名映射不同Spring Boot应用的配置方案
这种同IP多域名指向不同后端应用的场景,核心是通过反向代理的虚拟主机功能实现请求分发,以下是生产环境常用的3种实现方案:
方案1:使用Nginx做反向代理(首选,适配绝大多数场景)
前置准备
- 两个Spring Boot应用分别配置不同的本地端口,比如webapp1用
8080、webapp2用8081,确保两个应用在服务器本地可以正常访问 www.foo.com和www.bar.com两个域名已经解析到当前服务器的公网IP
配置步骤
- 服务器上安装Nginx后,进入配置目录,通常是
/etc/nginx/conf.d/,新建独立的配置文件webapps.conf - 写入以下虚拟主机配置:
# 对应www.foo.com的转发规则 server { listen 80; server_name www.foo.com; location / { proxy_pass http://127.0.0.1:8080; # 传递请求原始信息给后端Spring Boot应用 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; } } # 对应www.bar.com的转发规则 server { listen 80; server_name www.bar.com; location / { proxy_pass http://127.0.0.1:8081; 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; } }
- 保存配置后执行
nginx -t校验语法是否正确,校验通过后执行nginx -s reload重载配置即可生效
该方案不侵入应用代码、性能高,后续需要配置HTTPS、静态资源缓存、限流等能力都可以直接在Nginx层完成。
方案2:使用Caddy做反向代理(配置更简洁,适合小型项目)
如果不想处理Nginx的复杂配置,可以选择Caddy,配置文件Caddyfile只需写以下内容即可:
www.foo.com { reverse_proxy 127.0.0.1:8080 } www.bar.com { reverse_proxy 127.0.0.1:8081 }
启动Caddy后配置自动生效,还会自动申请、续期SSL证书,不需要手动处理HTTPS配置。
方案3:基于Spring Cloud Gateway实现(仅适合微服务体系场景)
如果不想额外部署Nginx/Caddy等反向代理组件,可以单独部署一个Spring Cloud Gateway应用监听80端口,根据Host头路由请求到不同的后端应用,核心配置(application.yml)如下:
spring: cloud: gateway: routes: - id: webapp1 uri: http://127.0.0.1:8080 predicates: - Host=www.foo.com - id: webapp2 uri: http://127.0.0.1:8081 predicates: - Host=www.bar.com
该方案需要额外维护Gateway应用,性能不如Nginx,仅适合已经在使用Spring Cloud技术栈的项目。
内容的提问来源于stack exchange,提问作者LasseDOF
相关产品推荐
相关产品推荐

