nginx 重定向到 tomcat spring 引导 Web 应用程序的困难

Difficulties with nginx redirect to tomcat spring boot web application

我用 spring boot 和 thymeleaf 开发了一个小网站。它通过 webjars 使用 bootstrap 和 jquery。 运行 在本地,一切正常,js 和 css 文件已正确传送。

当我尝试将它部署到我的服务器时,事情变得很糟糕。我有一个默认的 tomcat8 运行,它通过 nginx 代理。

html 文件的站点内容已正确传送,但是找不到 webjars。

我的application.properties长得像

/example

webapp 作为 /example 部署到 tomcat。

index.html中的脚本路径:

<script src="https://cdn.jsdelivr.net/jquery/3.1.1/jquery.min.js" th:src="@{/webjars/jquery/3.1.1/jquery.min.js}"></script>
<script src="https://cdn.jsdelivr.net/bootstrap/3.3.7/js/bootstrap.min.js" th:src="@{/webjars/bootstrap/3.3.7/js/bootstrap.min.js}"></script>

尽管我不喜欢使用CDN,因为我对它们知之甚少,但无论如何。

chrome devtools 中的错误消息是:

404 GET https://example.de/example/webjars/bootstrap/3.3.7/css/bootstrap.min.css
404 GET https://example.de/example/webjars/jquery/3.1.1/jquery.min.js 
404 GET https://example.de/example/webjars/bootstrap/3.3.7/js/bootstrap.min.js 

nginx配置:

server {
        listen 80;

        server_name example.de www.example.de;
        return 301 https://$server_name$request_uri;
}

server {
        listen 443 ssl;

        server_name     example.de www.example.de;
        root            /var/lib/tomcat8/webapps/example;
        ...

        location / {
                proxy_pass http://127.0.0.1:8080/example/;
        }
}

我也试过

rewrite ^/collectd(/.*)$  break;

但没有任何帮助。

我的pom:

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

<groupId>de.example</groupId>
<artifactId>example-website</artifactId>
<version>1.0</version>
<packaging>war</packaging>

<name>example-website</name>
<description>example website</description>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.4.1.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <tomcat.version>8.0.32</tomcat.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-juli</artifactId>
        <version>${tomcat.version}</version>
    </dependency>


    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.webjars</groupId>
        <artifactId>bootstrap</artifactId>
        <version>3.3.7</version>
    </dependency>
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>jquery</artifactId>
            <version>3.1.1</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

任何人都可以告诉我我必须添加到 nginx 配置,它实际上重定向到 webapp 文件夹吗?

非常感谢您的宝贵时间和帮助。

请按以下方式在您的配置中添加资源处理程序:

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    if (!registry.hasMappingForPattern("/webjars/**")) {
        registry.addResourceHandler("/webjars/**").addResourceLocations(
                "classpath:/META-INF/resources/webjars/");
    }
    if (!registry.hasMappingForPattern("/**")) {
        registry.addResourceHandler("/**").addResourceLocations(
                RESOURCE_LOCATIONS);
    }
}

可以通过向 nginx 站点(位置)配置添加缺少的重写指令来解决该问题。

缺少的行是:

rewrite ^/example(.*)$  last;