如何在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
头,即你的外向域名,但我想不出一个好的方法来传递端口。
我有一个 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
头,即你的外向域名,但我想不出一个好的方法来传递端口。