当前位置: 首页 > 知识库问答 >
问题:

如何处理Spring Boot 2.2.0中的x-forwarded-headers?(反向代理背后的Spring Web MVC)

闽涵蓄
2023-03-14

带有Spring Web MVC的Spring Boot 2.2.0应用程序运行在反向代理之后。Spring如何正确处理X-Forwarded{Prefix,Host,Proto}-头来识别向服务器发出的实际请求?

共有1个答案

武彭薄
2023-03-14

带Spring防尘套

NATIVE意味着servlet容器(例如undertow、tomcat)正在解析x-forwarded头,这在大多数情况下都很好。如果依赖X-Forwarded-Prefix,则必须使用框架,以便请求。getContextPath()设置正确。

示例:

>

  • 用户在浏览器中键入:<代码>https://mydomain.tld/my-microservice/actuator
  • 微服务“我的微服务”(如用户服务)应处理请求;它正在本地主机上运行:8080
  • 反向代理按如下方式转发请求:

    // Forwarded-Request from Reverse Proxy to your microservice
    GET http://localhost:8080/actuator/
    X-Forwarded-Host: mydomain.tld
    X-Forwarded-Proto: https
    X-Forwarded-Prefix: /my-microservice
    

    调试到HttpServletRequest将导致:

    request.getRequestURL(): "https://mydomain.tld/my-microservice/actuator/"
    request.getScheme(): "https"
    request.getContextPath(): "/my-microservice"
    new UrlPathHelper().getPathWithinApplication(request): "/actuator"
    

  •  类似资料:
    • 我在服务器上安装了keycloak standanlone,并尝试通过Nginx在反向代理后面使用它。Keycloak绑定到127.0.0.1

    • 我在谷歌上冲浪,没有找到任何具体的答案或例子,所以再次尝试我的运气在这里(经常是幸运的)。 问题所在 > 我在apache反向代理后面运行了一个spring boot RESTful服务。此RESTful服务只运行HTTP。假设它运行在本地IP172.S端口8080上。 我还配置了一个apache反向代理。假设它运行在本地IP172.a和公共IP55.a上。该代理响应两个端口80,但所有HTTP通

    • 我想在代理之后提供Restful API,但我不知道如何将请求重定向到Spring Boot应用程序,以便可以使用域名访问它。 我的Spring Boot应用程序使用spring-boot-starter-tomcat运行,应用程序部署良好,我可以在服务器上使用java-jar myApplication.jar部署它。 该应用程序还可以通过写入远程访问https://1.2.3.4:8090在浏

    • 我是新来的Spring Security,并试图开发Spring Boot应用程序与谷歌登录使用OAuth2下运行的主机名: 8080。这个程序是背后的Apache反向代理服务器https://url.com. Spring启动版本2.1。0 Spring Security版本5.1.1 build.gradle: 应用yml: Spring Security配置: 我请求https://url.

    • 我已经嵌入了在7000端口上运行的Jetty。另外,我有一个keycloak服务器运行在同一台机器的端口8100上。 我的所有客户端访问都通过Jetty进行,即localhost:7000。因此,我将keycloak作为Jetty上的反向代理,即localhost:7000/keycloak/auth将重定向到localhost:8100/auth。它击中正确。 现在,有KeycloakInsta

    • null 这起作用了,当调用https://www.website.com/auth/oauth/authorizeendpoint时,我将在https://www.website.com/auth/login上重定向,并看到我的登录表单。 问题是没有加载jquery或css这样的资源,因为它试图通过URL https://www.website.com/resources/jquery.min.