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不主动触发跳转,后续的资源加载、跳转请求也会直接指向后端地址,导致前端域名无法正常加载应用
解决步骤
- 修正Bitbucket本身的基础配置
- 临时通过后端地址
bitbucketserver.com:7990登录Bitbucket管理后台 - 进入「服务器设置」页面,将*基础URL(Base URL)*修改为前端对外的访问地址
http://example.com - 保存配置并重启Bitbucket服务,让配置生效
- 临时通过后端地址
- 补全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> - 验证效果
保存配置后清空浏览器缓存,重新访问example.com,即可正常加载Bitbucket应用,不会再自动跳转到后端域名地址
内容的提问来源于stack exchange,提问作者Vidul Talwar
相关产品推荐
相关产品推荐

