Spring HATEOAS ResourceSupport генерирует неверные URL-адреса в своих ответах. Я использую Tomcat с Spring и NGINX в качестве обратного прокси.nginx обратный прокси + Spring ResourceSupport создает неверный префикс пути URL
Spring генерироваться URL: http://localhost:8080/spring-ng-seed
URL проекта: https://spring-ng-seed.dev/
(служит статический контент),
Web API URL: https://spring-ng-seed.dev/wapi/
Все запросы /wapi/
работают нормально, однако ResourceSupport Spring HATEOAS является порождающие URLs, что выглядят так: https://spring-ng-seed.dev/spring-ng-seed/foo/bar
вместо https://spring-ng-seed.dev/wapi/foo/bar
Например, self rel, когда мы вызываем 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 Config:
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;
}
}
My 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>
Я сделал, как ты просил, и я изменил следующую конфигурацию: 'proxy_set_header X-Forwarded префикс/WAPI;' Нет эффекта. Я проверил вывод заголовков, полученных в Спрингс 'HttpServletRequest' и это то, что я нашел: ' Хост: "spring-ng-seed.dev" '' X-Real-IP: "127.0.0.1" ' ' X-Forwarded-Proto: "https" ' ' X-Forwarded-Prefix: "/ wapi" ' ' X-Forwarded-Host: null' 'X-Forwarded-For:" 127.0.0.1 "' X-Forwarded-Foro: 'X-NginX-Proxy: true' Любые мысли? Благодарю. –
Поддержка 'X-Forwarded-Prefix' была только [добавлена в Spring 4.1.3] (https://github.com/spring-projects/spring-framework/commit/7f11c1ee2f802b3a2a5b821c821b15c6705dc085), основанная на вашем POM, кажется, что вы используя Spring 4.0.5? –