You need to enable JavaScript to run this app. IIS 10配置Bitbucket Server反向代理时出现重定向而非URL重写问题
优惠活动
大模型
产品
解决方案
定价
更多

IIS 10配置Bitbucket Server反向代理时出现重定向而非URL重写问题

IIS部署Bitbucket反向代理自动跳转后端域名问题解决

问题场景

  • 运行环境为IIS 10,后端运行Atlassian Bitbucket服务器版,应用本身功能完全正常;同服务器上部署的其他应用(包括Atlassian Confluence)反向代理均运行稳定,未出现跳转异常
  • 已配置基础反向代理规则:将前端域名example.com的所有请求,转发到后端服务地址bitbucketserver.com:7990
  • 实际故障表现:浏览器访问example.com时,会被直接302重定向到后端域名bitbucketserver.com,无法通过前端域名正常加载应用;曾尝试将web.config中的后端地址替换为对应服务器IP,故障没有改善

故障根源

问题并非反向代理规则语法错误,核心是两个配置缺口:

  • Bitbucket自带的基础地址校验机制:如果Bitbucket后台设置的对外公开访问地址(Base URL)和浏览器实际访问的前端域名不匹配,Bitbucket会主动返回302重定向,引导浏览器跳转到它预设的地址
  • IIS反向代理的默认响应处理逻辑:默认配置不会修改后端服务返回的响应内容、重定向头中的后端域名,就算Bitbucket不主动触发跳转,后续的资源加载、跳转请求也会直接指向后端地址,导致前端域名无法正常加载应用

解决步骤

  1. 修正Bitbucket本身的基础配置
    • 临时通过后端地址bitbucketserver.com:7990登录Bitbucket管理后台
    • 进入「服务器设置」页面,将*基础URL(Base URL)*修改为前端对外的访问地址http://example.com
    • 保存配置并重启Bitbucket服务,让配置生效
  2. 补全IIS站点的web.config规则
    替换原有web.config中的反向代理配置,补充请求头传递、响应内容重写、重定向头修改的规则,最终生效的配置如下:
    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <system.webServer>
            <rewrite>
                <rules>
                    <rule name="ReverseProxyInboundRule1" stopProcessing="true">
                        <match url="(.*)" />
                        <action type="Rewrite" url="http://bitbucketserver.com:7990/{R:1}" />
                        <!-- 把真实的前端访问信息传递给后端 -->
                        <serverVariables>
                            <set name="HTTP_X_FORWARDED_HOST" value="{HTTP_HOST}" />
                            <set name="HTTP_X_ORIGINAL_HOST" value="{HTTP_HOST}" />
                        </serverVariables>
                    </rule>
                </rules>
                <outboundRules>
                    <!-- 重写HTML响应中嵌入的后端域名链接 -->
                    <rule name="HtmlContentRewrite" preCondition="HtmlContentType">
                        <match filterByTags="A, Form, Img" pattern="^http(s)?://bitbucketserver.com:7990/(.*)" />
                        <action type="Rewrite" value="http{R:1}://example.com/{R:2}" />
                    </rule>
                    <!-- 重写后端返回的Location重定向头中的后端域名 -->
                    <rule name="RedirectHeaderRewrite">
                        <match serverVariable="RESPONSE_Location" pattern="^http(s)?://bitbucketserver.com:7990/(.*)" />
                        <action type="Rewrite" value="http{R:1}://example.com/{R:2}" />
                    </rule>
                    <preConditions>
                        <preCondition name="HtmlContentType">
                            <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
                        </preCondition>
                    </preConditions>
                </outboundRules>
            </rewrite>
            <!-- 启用反向代理的响应Host自动重写开关 -->
            <proxy reverseRewriteHostInResponseHeaders="true" />
        </system.webServer>
    </configuration>
    
  3. 验证效果
    保存配置后清空浏览器缓存,重新访问example.com,即可正常加载Bitbucket应用,不会再自动跳转到后端域名地址

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 09:15:02