Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
nginx反向代理+;Spring ResourceSupport生成错误的URL路径前缀_Spring_Spring Mvc_Nginx_Spring Hateoas_Maven Tomcat Plugin - Fatal编程技术网

nginx反向代理+;Spring ResourceSupport生成错误的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的资源支持正

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的资源支持正在生成如下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无效。我检查了Springs
HttpServletRequest
中接收到的头文件的输出,这是我发现的:
主机:“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?