Springmvc nginx实现动静分离过程详解

 更新时间:2020年09月24日 10:21:08   作者:贾树丙  
这篇文章主要介绍了Springmvc nginx实现动静分离过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

在下自己整理 ,如有错误请指正

一般的nginx的 静态文件的项目是这么配置的

location ~ .*\.(js|css)?$
{
  root E:/Workspaces/Idea15/demo/web/WEB-INF;
  expires 1h;
}

但是如果这样配置,系统是读取不到对应的文件的,因为springmvc本身的前端模板配置了访问静态资源 Handles

那如何使用nginx搭理访问,实现动静分离

搭建nginx代理

第一阶段,修改nginx.conf 文件

#location / {
  #root  html;
  #index index.html index.htm;
#}
location / {
  proxy_next_upstream http_502 http_504 error timeout invalid_header;
  proxy_pass  http://127.0.0.1:8080;
  # 真实的客户端IP
  proxy_set_header  X-Real-IP    $remote_addr;
  # 请求头中Host信息
  proxy_set_header  Host       $host;
  # 代理路由信息,此处取IP有安全隐患
  proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
  # 真实的用户访问协议
  proxy_set_header  X-Forwarded-Proto $scheme;
}

这样替换以后,就可以通过nginx 代理转到tomcat了,但是静态资源仍然是通过tomcat 来读取的

注意:不需要更改原始的项目文件,需要修改tomcat的配置,bin/server.xml 将端口号由80改回8080

处理静态文件

第二阶段,实现动静分离

在springmvc的前端控制器中配置如下:

<mvc:resources mapping="/image/**" location="/WEB-INF/"/>
<mvc:resources mapping="/css/**" location="/WEB-INF/"/>
<mvc:resources mapping="/js/**" location="/WEB-INF/"/>

在nginx中配置如下,demo是我的项目名称,以下三种方式都可以区分

location demo/image/ {
  root E:/Workspaces/Idea15/demo/web/WEB-INF;
}
location /css/ {
  root E:/Workspaces/Idea15/demo/web/WEB-INF;
}
location js/ {
  root E:/Workspaces/Idea15/demo/web/WEB-INF;
}

但是写成 /demo/image/ 就是不行的

注:404页面等,如果在springmvc的项目中配置了,就不需要在这里接着配置了

最终的nginx.conf 页面代码如下:

#user nobody;
worker_processes 1;

events {
  worker_connections 1024;
}

http {
  include    mime.types;
  default_type application/octet-stream;

  #access_log logs/access.log main;

  sendfile    on;
  #tcp_nopush   on;

  #keepalive_timeout 0;
  keepalive_timeout 65;

  #gzip on;

  server {
    listen    80;
    server_name localhost;

    location / {
      proxy_next_upstream http_502 http_504 error timeout invalid_header;
      proxy_pass  http://127.0.0.1:8080;
      # 真实的客户端IP
      proxy_set_header  X-Real-IP    $remote_addr;
      # 请求头中Host信息
      proxy_set_header  Host       $host;
      # 代理路由信息,此处取IP有安全隐患
      proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
      # 真实的用户访问协议
      proxy_set_header  X-Forwarded-Proto $scheme;
    }

    location image/ {
      root E:/Workspaces/Idea15/demo/web/WEB-INF;
    }
    location css/ {
      root E:/Workspaces/Idea15/demo/web/WEB-INF;
    }
    location js/ {
      root E:/Workspaces/Idea15/demo/web/WEB-INF;
    }

    # redirect server error pages to the static page /50x.html
    #
    error_page  500 502 503 504 /50x.html;
    location = /50x.html {
      root  html;
    }
  }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Java synchronized与CAS使用方式详解

    Java synchronized与CAS使用方式详解

    提到Java的知识点一定会有多线程,JDK版本不断的更迭很多新的概念和方法也都响应提出,但是多线程和线程安全一直是一个重要的关注点。比如说我们一入门就学习的synchronized怎么个实现和原理,还有总是被提到的CAS是啥,他和synchronized关系是啥?请往下看
    2023-01-01
  • Java编程Socket实现多个客户端连接同一个服务端代码

    Java编程Socket实现多个客户端连接同一个服务端代码

    这篇文章主要介绍了Java编程Socket实现多个客户端连接同一个服务端代码,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • Java实现前端jsencrypt.js加密后端解密的示例代码

    Java实现前端jsencrypt.js加密后端解密的示例代码

    这篇文章主要为大家详细介绍了如何利用jsencrypt.js实现前端加密,利用Java实现后端解密的功能,文中的示例代码讲解详细,需要的可以参考一下
    2022-09-09
  • Spring Security实现身份认证和授权的示例代码

    Spring Security实现身份认证和授权的示例代码

    在 Spring Boot 应用中使用 Spring Security 可以非常方便地实现用户身份认证和授权,本文主要介绍了Spring Security实现身份认证和授权的示例代码,感兴趣的可以了解一下
    2023-06-06
  • Java中使用JWT生成Token进行接口鉴权实现方法

    Java中使用JWT生成Token进行接口鉴权实现方法

    这篇文章主要介绍了Java中使用JWT生成Token进行接口鉴权实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • Java编程实现打地鼠文字游戏实例代码

    Java编程实现打地鼠文字游戏实例代码

    这篇文章主要介绍了Java编程实现打地鼠文字游戏实例代码,具有一定借鉴价值,需要的朋友可以参考下。
    2017-11-11
  • 一次java异步任务的实战记录

    一次java异步任务的实战记录

    最近做项目的时候遇到了一个小问题,从前台提交到服务端A,A调用服务端B处理超时,下面这篇文章主要给大家介绍了一次java异步任务的实战记录,需要的朋友可以参考下
    2022-05-05
  • 解决idea报错 Connot resolve column 的问题

    解决idea报错 Connot resolve column 的问题

    这篇文章主要介绍了解决idea报错 Connot resolve column 的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • Spring的拦截器HandlerInterceptor详解

    Spring的拦截器HandlerInterceptor详解

    这篇文章主要介绍了Spring的拦截器HandlerInterceptor详解,拦截器是相对于Spring中来说的,它和过滤器不一样,过滤器的范围更广一些是相对于Tomcat容器来说的,拦截器可以对用户进行拦截过滤处理,需要的朋友可以参考下
    2024-01-01
  • java 枚举enum的用法(与在switch中的用法)

    java 枚举enum的用法(与在switch中的用法)

    这篇文章主要介绍了java 枚举enum的用法(与在switch中的用法),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10

最新评论