2016-04-19 10 views
1

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> 

Antwort

0

Können Sie bitte einen Blick auf die Proxy-Header haben, die Ihre Anfrage enthält, wenn es trifft Ihre Bedienung. spring-hateoas würde den Header x-forwarded-prefix verarbeiten und ihn Ihrem Pfad voranstellen.

Werfen Sie einen Blick auf diese Antwort hier: https://stackoverflow.com/a/36163242/5371736

+0

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. –

+1

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? –