首页 > 解决方案 > RESORUCE NOT FOUND ERROR: osweb.servlet.DispatcherServlet : POST "/live/api/auth/login", parameters={} 其中 NGINX 将 live/api 路由到 SpringBoot API

问题描述

我正在尝试使用 NGINX 反向代理服务 SpringBoot API(:8081),如下所示。

   location /live/api {
       proxy_pass http://localhost:8081;

      proxy_set_header    Host               $host;
      proxy_set_header    X-Real-IP          $remote_addr;
      proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header    X-Forwarded-Host   $host;
      proxy_set_header    X-Forwarded-Server $host;
      proxy_set_header    X-Forwarded-Port   $server_port;
      proxy_set_header    X-Forwarded-Proto  $scheme;

    }

此 NGINX 配置有效,但 SpringBoot API 不/live/api作为其基础。下面是SecurityConfig.java

    // Set permissions on endpoints
    http.authorizeRequests()
            // Our public endpoints
            .antMatchers("/auth/**").permitAll()
            .antMatchers("/public/**").permitAll()

            // Our private endpoints
            .anyRequest().authenticated();

示例情况:

  1. 发布“/live/api/auth/login”,参数={}RESOURCE NOT FOUND ERROR
o.s.web.servlet.DispatcherServlet        : POST "/live/api/auth/login", parameters={}
o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped to ResourceHttpRequestHandler [Classpath [META-INF/resources/],
 Classpath [resources/], Classpath [static/], Classpath [public/], ServletContext [/]]
o.j.s.OpenEntityManagerInViewInterceptor : Opening JPA EntityManager in OpenEntityManagerInViewInterceptor
o.s.w.s.r.ResourceHttpRequestHandler     : Resource not found
o.j.s.OpenEntityManagerInViewInterceptor : Closing JPA EntityManager in OpenEntityManagerInViewInterceptor
o.s.web.servlet.DispatcherServlet        : Completed 404 NOT_FOUND
o.s.web.servlet.DispatcherServlet        : "ERROR" dispatch for POST "/error", parameters={}
s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController#error(HttpServletRequest)
o.j.s.OpenEntityManagerInViewInterceptor : Opening JPA EntityManager in OpenEntityManagerInViewInterceptor
o.s.w.s.m.m.a.HttpEntityMethodProcessor  : Using 'application/json', given [application/json] and 
supported [application/json, application/*+json,
 application/json, application/*+json]
o.s.w.s.m.m.a.HttpEntityMethodProcessor  : Writing [{timestamp=Mon Jul 12 16:32:01 UTC 2021, status=404, error=Not Found, 
message=, path=/live/api/auth/ (truncated)...]
o.j.s.OpenEntityManagerInViewInterceptor : Closing JPA EntityManager in OpenEntityManagerInViewInterceptor
o.s.web.servlet.DispatcherServlet        : Exiting from "ERROR" dispatch, status 404
o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] 
in context with path [] threw exception

标签: javaspring-bootapinginxnginx-reverse-proxy

解决方案


只需添加server.servlet.contextPath=/live/api到您的应用程序配置文件中。


推荐阅读