2016-04-19 15 views
1

Spring HATEOAS ResourceSupportが応答に間違ったURLを生成しています。私は、リバースプロキシとしてSpringとNGINXでTomcatを使用しています。nginxリバースプロキシ+ Spring ResourceSupportが間違ったURLパスプレフィックスを生成する

春のURLを生成:http://localhost:8080/spring-ng-seed

プロジェクトURL:https://spring-ng-seed.dev/(静的なコンテンツを提供しています)、

のWeb APIのURL:/wapi/作業罰金にhttps://spring-ng-seed.dev/wapi/

すべての要求が春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と呼ぶときのセルフrelは、https://spring-ng-seed.dev/spring-ng-seed/foo/barで終わり、自己relとして戻ってきます。

/spring-ng-seed/foo/barは、応答リンクで/wapi/foo/barにする必要があります。

何が正しく設定されていないか、nginx、tomcat、springのいずれかがわかりませんが、他の場所では何も見つかりません。

私はフロントエンドでAngularJSも使用していますが、問題はフロントエンドにあるのではなく、リバースプロキシまたはTomcatとしてnginxを使用しています。

誰でも助けてください。

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> 

答えて

0

あなたはそれがあなたに当たったとき、あなたの要求が含まれているプロキシヘッダを見てくださいすることができサービス。 spring-hateoasはx-forwarded-prefixヘッダーを処理し、それをあなたのパスの先頭に追加します。あなたが尋ねた、と私は、次の設定を変更して、私がやった https://stackoverflow.com/a/36163242/5371736

+0

は、ここではこの答えを見てください 'proxy_set_headerのX-転送されたプレフィックス/ 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-NginX-Proxy:true' どのような考えですか?ありがとう。 –

+1

'X-Forwarded-Prefix'のサポートは、あなたのPOMに基づいて、[Spring 4.1.3で追加](https://github.com/spring-projects/spring-framework/commit/7f11c1ee2f802b3a2a5b821c821b15c6705dc085)でしたSpring 4.0.5を使用していますか? –

関連する問題