gpt4 book ai didi

spring - nginx反向代理+Spring ResourceSupport产生错误的URL路径前缀

转载 作者:行者123 更新时间:2023-12-04 02:32:37 24 4
gpt4 key购买 nike

Spring HATEOAS ResourceSupport 在其响应中生成不正确的 URL。我将 Tomcat 与 Spring 和 NGINX 一起用作反向代理。

Spring 生成的 URL:http://localhost:8080/spring-ng-seed

项目 URL:https://spring-ng-seed.dev/(提供静态内容),

网络 API 网址:https://spring-ng-seed.dev/wapi/

所有对 /wapi/ 的请求都工作正常,但是 Spring HATEOAS 的 ResourceSupport 正在生成如下所示的 url:https://spring-ng-seed.dev/spring-ng-seed/foo/bar代替https://spring-ng-seed.dev/wapi/foo/bar

例如,当我们调用 https://spring-ng-seed.dev/wapi/foo/bar 时,我们最终会得到 https://spring-ng -seed.dev/spring-ng-seed/foo/bar 作为 self rel 返回,这是不正确的。

/spring-ng-seed/foo/bar 在响应链接中应该是 /wapi/foo/bar

我不确定配置错误的是什么,nginx、tomcat 或 spring,但我在其他任何地方都找不到关于此的任何信息。

我也在前端使用 AngularJS,但我怀疑问题出在前端,而不是 nginx 作为反向代理或 tomcat。

有人可以帮忙吗?

NGINX 配置:

server {
charset UTF-8;
listen 80;
listen 443 ssl;

server_name www.spring-ng-seed.dev spring-ng-seed.dev;

ssl on;
ssl_certificate /Users/reecefowell/Projects/Spring/spring-ng-seed/cert.pem; # path to your cacert.pem
ssl_certificate_key /Users/reecefowell/Projects/Spring/spring-ng-seed/server.key; # path to your privkey.pem
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5;
ssl_prefer_server_ciphers on;

location /wapi/ {
proxy_pass http://localhost:8080/spring-ng-seed/;
proxy_read_timeout 90;
proxy_connect_timeout 90;
# proxy_ssl_session_reuse off;
proxy_redirect off;

proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Prefix $http_x_forwarded_prefix;
proxy_set_header X-Forwarded-Host $http_x_forwarded_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;

proxy_set_header X-Forwarded-Protocol https;
proxy_set_header X-Forwarded-Ssl on;
proxy_set_header X-Url-Scheme https;
}

location / {
root /Users/reecefowell/Projects/Spring/spring-ng-seed/src/main/webapp/app/build;

index index.html;
}
}

我的 Tomcat 是通过我的 pom.xml 文件配置的:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>
<packaging>war</packaging>
<groupId>spring-ng-seed</groupId>
<artifactId>spring-ng-seed</artifactId>
<version>1.0-SNAPSHOT</version>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-framework-bom</artifactId>
<version>4.0.5.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.hateoas</groupId>
<artifactId>spring-hateoas</artifactId>
<version>0.12.0.RELEASE</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.4.0</version>
</dependency>

...

</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<!--<configuration>-->
<!--<url>http://localhost:8080/manager</url>-->
<!--<server>localhost</server>-->
<!--</configuration>-->
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
</plugin>
</plugins>
</build>
</project>

最佳答案

当请求到达您的服务时,您能否看一下您的请求包含的代理 header 。 spring-hateoas 将处理 x-forwarded-prefix header 并将其添加到您的路径中。

在这里看看这个答案: https://stackoverflow.com/a/36163242/5371736

关于spring - nginx反向代理+Spring ResourceSupport产生错误的URL路径前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36731055/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com