nginx反向代理+;Spring ResourceSupport生成错误的URL路径前缀
Spring HATEOAS ResourceSupport在其响应中生成错误的URL。我使用Tomcat和Spring以及NGINX作为反向代理 Spring生成的URL:nginx反向代理+;Spring ResourceSupport生成错误的URL路径前缀,spring,spring-mvc,nginx,spring-hateoas,maven-tomcat-plugin,Spring,Spring Mvc,Nginx,Spring Hateoas,Maven Tomcat Plugin,Spring HATEOAS ResourceSupport在其响应中生成错误的URL。我使用Tomcat和Spring以及NGINX作为反向代理 Spring生成的URL:http://localhost:8080/spring-ng种子 项目URL:https://spring-ng-seed.dev/(提供静态内容) Web API URL:https://spring-ng-seed.dev/wapi/ 所有对/wapi/的请求都可以正常工作,但是Spring HATEOAS的资源支持正
http://localhost:8080/spring-ng种子
项目URL:https://spring-ng-seed.dev/
(提供静态内容)
Web API URL:https://spring-ng-seed.dev/wapi/
所有对/wapi/
的请求都可以正常工作,但是Spring HATEOAS的资源支持正在生成如下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>
4.0.0
战争
春播
春播
1.0-快照
UTF-8
org.springframework
spring框架bom表
4.0.5.1发布
聚甲醛
进口
org.springframework
spring上下文
org.springframework
SpringWebMVC
org.springframework.hateoas
春风
0.12.0.1版本
com.fasterxml.jackson.core
杰克逊核心
2.4.0
com.fasterxml.jackson.core
杰克逊注释
2.4.0
com.fasterxml.jackson.core
杰克逊数据绑定
2.4.0
...
org.apache.maven.plugins
maven编译器插件
3.1
1.6
1.6
org.apache.tomcat.maven
tomcat7 maven插件
2.2
org.apache.maven.plugins
maven战争插件
2.4
您能看一下您的请求在到达您的服务时包含的代理头吗。spring hateoas将处理x-forwarded-prefix
头并将其前置到您的路径
请看下面的答案:
我按照您的要求做了,并更改了以下配置:
proxy\u set\u header X-Forwarded-Prefix/wapi代码>无效。我检查了SpringsHttpServletRequest
中接收到的头文件的输出,这是我发现的:主机:“spring ng seed.dev”
X-Real-IP:“127.0.0.1”
X-Forwarded-Proto:“https”X-Forwarded-Prefix:“/wapi”X-Forwarded-Host:nullX-Forwarded-For:“127.0.0.1”X-NginX-Proxy:true
有什么想法吗?谢谢。仅支持X-Forwarded-Prefix
,基于您的POM,您似乎正在使用Spring 4.0.5?