Spring HATEOAS ResourceSupport generiert in seinen Antworten falsche URLs. Ich verwende Tomcat mit Spring und NGINX als Reverse Proxy.Nginx-Reverseproxy + Spring ResourceSupport erzeugt falsches URL-Pfadpräfix
Frühling generierte URL: http://localhost:8080/spring-ng-seed
Projekt-URL: https://spring-ng-seed.dev/
(dient statische Inhalte),
Web API URL: https://spring-ng-seed.dev/wapi/
Alle Anfragen an /wapi/
funktionieren wird jedoch Frühling HATEOAS des ResourceSupport Urls erzeugen, die aussehen wie: https://spring-ng-seed.dev/spring-ng-seed/foo/bar
statt https://spring-ng-seed.dev/wapi/foo/bar
Zum Beispiel, ein selbst rel, wenn wir anrufen https://spring-ng-seed.dev/wapi/foo/bar
wir am Ende mit https://spring-ng-seed.dev/spring-ng-seed/foo/bar
kommen wieder als selbst rel rel, was falsch ist.
/spring-ng-seed/foo/bar
sollte /wapi/foo/bar
in den Antwort-Links sein.
Ich bin mir nicht sicher, was falsch konfiguriert ist, nginx, tomcat oder spring, aber ich kann nirgendwo anders etwas finden.
Ich benutze auch AngularJS am Frontend, aber ich bezweifle, dass das Problem mit dem Frontend liegt, sondern mit Nginx als Reverse Proxy oder Tomcat.
Kann mir bitte jemand helfen?
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;
}
}
Mein Tomcat über meine pom.xml-Datei konfiguriert ist:
<?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>
ich wie du gefragt, und ich änderte die folgende Konfiguration: 'proxy_set_header X-Forwarded-Präfix/wapi;' Keine Wirkung. Ich habe die Ausgabe der Header in Federn erhalten 'HttpServletRequest' und das ist, was ich gefunden habe: ' Host: "spring-ng-seed.dev" ' ' X-Real-IP: "127.0.0.1" ' ' X-Forwarded-Proto: "https" ' ' X-Weitergeleitetes-Präfix: "/ wapi" ' ' X-Forwarded-Host: null' 'X-Forwarded-For:" 127.0.0.1 "' 'X-NginX-Proxy: true' Irgendwelche Gedanken? Vielen Dank. –
Unterstützung für 'X-Forwarded-Prefix' wurde nur [im Frühjahr 4.1.3 hinzugefügt] (https://github.com/spring-projects/spring-framework/commit/7f11c1ee2f802b3a2a5b821c821b15c6705dc085), basierend auf Ihrem POM, wie Sie es scheinen mit Frühling 4.0.5? –