为何我的URL在Traefik+tt-rss环境下被异常修改?
问题分析与解决方案
核心原因
请求URL被修改为内网端口的HTTP地址,并非Alamofire或iOS URL解析异常,而是tt-rss服务器返回了重定向响应,将请求导向了它在Traefik后方的内网端口(8889)和HTTP协议。iOS的URLSession(Alamofire基于此实现)自动遵循重定向后,触发了App Transport Security(ATS)的安全限制(ATS默认禁止HTTP请求)。
为什么tt-rss会返回错误的重定向?
tt-rss默认使用自身的内网端口和协议生成重定向URL,它不知道自己被Traefik反向代理托管,因此无法识别公网的HTTPS地址和端口。
解决方法
方法1:配置Traefik传递正确的请求头
让Traefik向tt-rss传递外部请求的真实协议、主机和端口,tt-rss会根据这些头生成正确的公网URL。
添加Traefik中间件配置(YAML示例):
http: middlewares: ttrss-proxy-headers: headers: customRequestHeaders: X-Forwarded-Proto: "https" X-Forwarded-Host: "ttrss.example.com" X-Forwarded-Port: "443"
将该中间件绑定到tt-rss的路由规则上,确保tt-rss能接收到这些头信息。
方法2:直接修改tt-rss配置强制指定公网地址
在tt-rss的config.php配置文件中添加以下定义,强制tt-rss使用公网HTTPS地址生成所有内部URL和重定向:
define('SELF_URL_PATH', 'https://ttrss.example.com/'); define('HTTP_PROTOCOL', 'https');
验证
修改配置后重新发起Alamofire请求,抓包确认tt-rss不再返回指向内网HTTP地址的重定向,ATS错误即可解决。
内容的提问来源于stack exchange,提问作者Milo Gertjejansen
相关产品推荐
相关产品推荐

