You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

IIS重写规则搭配Tomcat 9.0:后续请求跳转至8080端口求助

问题分析

跳转暴露8080端口的核心原因是Spring Boot应用未感知到自身处于IIS反向代理之后。当应用生成跳转链接(如重定向、页面资源链接)时,会基于自身Tomcat服务的8080端口构建URL,而非用户实际访问的IIS 80端口。直接用java -jar运行时无此问题,是因为应用直接接收用户请求,能获取正确的请求上下文;但通过IIS代理后,应用收到的是来自IIS的内部请求,端口为8080,因此生成的链接会带上该端口。

解决方案1:完善IIS重写规则,传递代理请求头

修改现有IIS重写规则,添加请求头传递逻辑,将外部请求的主机、端口信息传给Tomcat:

<rule name="app" enabled="true" stopProcessing="false">
    <match url="^app.*" />
    <serverVariables>
        <set name="HTTP_X_FORWARDED_HOST" value="{HTTP_HOST}" />
        <set name="HTTP_X_FORWARDED_PORT" value="80" />
        <set name="HTTP_X_FORWARDED_PROTO" value="http" />
    </serverVariables>
    <action type="Rewrite" url="http://server-name:8080/{R:0}" logRewriteUrl="true" />
</rule>

注意:需在IIS「URL重写」模块的「视图服务器变量」中,添加HTTP_X_FORWARDED_HOST、HTTP_X_FORWARDED_PORT、HTTP_X_FORWARDED_PROTO这三个变量,否则IIS会拒绝设置。

解决方案2:配置Spring Boot识别代理头

在application.properties中添加以下配置,让应用读取IIS传递的代理头,生成正确的外部URL:

# 启用转发头处理(Spring Boot 2.2+版本)
server.forward-headers-strategy=native

# 配置信任的代理服务器(同一机器填localhost或IIS内网IP)
server.tomcat.remoteip.remote-ip-header=x-forwarded-for
server.tomcat.remoteip.protocol-header=x-forwarded-proto
server.tomcat.remoteip.host-header=x-forwarded-host

若使用Spring Boot 2.2之前版本,将server.forward-headers-strategy=native替换为server.use-forward-headers=true

额外验证

确保应用内生成链接时,基于HttpServletRequest上下文构建,而非硬编码端口。例如使用response.sendRedirect("/app/some-path"),而非response.sendRedirect("http://server-name:8080/app/some-path")。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 13:34:59