如何在httpd proxypass后面的EL spring-boot页面获取原始请求URI

How to get original request URI in EL spring-boot page behind httpd proxypass

我有一个 spring-boot web 应用程序,在端口 28081 上嵌入了 tomcat、运行,并且为代理配置了 httpd,如下所示:

ProxyPass / http://localhost:28081/
ProxyPassReverse / http://localhost:28081/

然后在 jsp 页面中,我需要将完整请求 URL 传递给 silverlight 小部件;但是

${pageContext.request.serverName}:${pageContext.request.serverPort}

将解析为 http://localhost:28081

所以我想依赖X-Forwarded-Host,但有时它确实包含多个代理地址,用逗号分隔。我不确定是否可以相信地址的顺序将被保留。

是否有更好的方法来做到这一点,在 jsp、httpd 配置或控制器代码中?

在控制器中,您可以使用 ServletUriComponentsBuilder:从请求中初始化它,它会选择代理 headers 并为您构建源的 URI,例如String uri = ServletUriComponentsBuilder.fromCurrentRequest().build().toString().

你可以在你的httpd配置中使用ProxyPreserveHost来保留原来的Host头,即你的外向域名,但我想不出一个好的方法来传递端口。