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;
    }
  }

}

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

(0)

相关推荐

  • SpringMVC如何把后台文件打印到前台

    实现效果如下: 代码为: @RequestMapping(value = "/tools/printContract") public void cell(HttpServletResponse response,HttpServletRequest request,String outName) { //根据outName获取到保存在服务器上的文件 String filePath = request.getSession().getServletContext().getRealPa

  • springmvc集成shiro登录失败处理操作

    一般的登录流程会有:用户名不存在,密码错误,验证码错误等.. 在集成shiro后,应用程序的外部访问权限以及访问控制交给了shiro来管理. shiro提供了两个主要功能:认证(Authentication)和授权(Authorization);认证的作用是证明自身可以访问,一般是用户名加密码,授权的作用是谁可以访问哪些资源,通过开发者自己的用户角色权限系统来控制. shiro的会话管理和缓存管理不在本文范围内. 下面通过登录失败的处理流程来介绍springmvc与shiro的集成. 依赖项目

  • 解决SpringMVC使用@RequestBody注解报400错误的问题

    一般使用@RequestBody接收的时候报400都是传入的json字符串和对应封装的对象不对应造成的 首先要注意 封装的对象中的字段类型有没有Date类型或者int等类型的,如果有的话,在set方法中统一将传入的参数要调整为String类型 在set方法中进行参数的转换 比如有一个Date类型的字段 private Date startTime; public Date getStartTime() { return startTime; } public void setStartTime(

  • SpringMVC框架post提交数据库出现乱码解决方案

    使用Post添加数据到数据库出现方块乱码 解决方法,在web.xml里最前面添加过滤器,代码如下,放在最前面,因为有优先级,要首先拦截 <filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-para

  • 浅谈springmvc 通过异常增强返回给客户端统一格式

    在springmvc开发中,我们经常遇到这样的问题:逻辑正常执行时返回客户端指定格式的数据,比如json,但是遇NullPointerException空指针异常,NoSuchMethodException调用的方法不存在异常,返回给客户端的是服务端异常堆栈信息,导致客户端不能正常解析数据:这明显不是我们想要的. 幸好从spring3.2提供的新注解@ControllerAdvice,从名字上可以看出大体意思是控制器增强.原理是使用AOP对Controller控制器进行增强(前置增强.后置增强.

  • 简单了解SpringMVC缓存对静态资源有什么影响

    我们知道在springmvc的配置中,可以添加缓存,但是缓存到底对静态资源有什么影响? 测试 没有添加缓存 <mvc:resources mapping="/image/**" location="/WEB-INF/"/> 添加了缓存 <mvc:resources mapping="/image/**" location="/WEB-INF/" cache-period="2592000"

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

    在下自己整理 ,如有错误请指正 一般的nginx的 静态文件的项目是这么配置的 location ~ .*\.(js|css)?$ { root E:/Workspaces/Idea15/demo/web/WEB-INF; expires 1h; } 但是如果这样配置,系统是读取不到对应的文件的,因为springmvc本身的前端模板配置了访问静态资源 Handles 那如何使用nginx搭理访问,实现动静分离 搭建nginx代理 第一阶段,修改nginx.conf 文件 #location /

  • springmvc处理模型数据ModelAndView过程详解

    这篇文章主要介绍了springmvc处理模型数据ModelAndView过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 springmvc提供了以下几种途径来输出模型数据: (1)ModelAndView:处理方法返回值类型为ModelAndView时,方法体即可通过该对象添加模型数据. (2)Map及Model:入参为org.springframework.ui.Model.org.springframework.ui.ModelMa

  • nginx 开启 pathinfo的过程详解

    apache往nginx去转,代码端用到了$_SERVER['PATH_INFO'],对于nginx默认是不开启pathinfo的.所以我们就要手动开启 1,url重写 location / { //方法1 if (!-e $request_filename) { rewrite ^/(.*)$ /index.php/$1 last; break; } } location / { //方法2 try_files $uri $uri/ /index.php$uri; } 2,pathinfo设置

  • SpringMVC自定义拦截器实现过程详解

    SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理.开发者可以自定义一些拦截器来实现特点的功能. 过滤器与拦截器的区别:拦截器是AOP思想的具体应用. 过滤器 servlet规范中的一部分,任何java web工程都可以使用 在url-pattern中配置了/*之后,可以对所有要访问的资源进行拦截 拦截器 拦截是SpringMVC框架自己的,只要使用SpringMVC框架的工程才能使用 拦截器只会拦截访问的控制方法,如果访问的是jsp/

  • SpringMVC Controller解析ajax参数过程详解

    在使用ajax发送请求时,如果发送的JSON数据的参数是一个类中的不同属性,在Controller类的方法中使用@RequestBody Object obj会直接封装进obj对象中 例如: 前端部分代码 JavaScript <script language="JavaScript"> function login(){ var user_name = $("#user_name").val(); //用户名 var user_password = $

  • 部署Nginx+Apache动静分离的实例详解

    Nginx动静分离介绍 Nginx的静态处理能力很强,但是动态处理能力不足,因此,在企业中常用动静分离技术 针对PHP的动静分离 静态页面交给Nginx处理 动态页面交给PHP-FPM模块或Apache处理 在Nginx的配置中,是通过location配置段配合正则匹配实现静态与动态页面的不同处理方式 反向代理原理 Nginx不仅能作为Web服务器,还具有反向代理.负载均衡和缓存的功能 Nginx通过proxy模块实现将客户端的请求代理至上游服务器,此时nginx与上游服务器的连接是通过http

  • SpringMVC实现Validation校验过程详解

    这篇文章主要介绍了SpringMVC实现Validation校验过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.概述 对前端的校验大多数通过js在页面校验,这种方法比较简单,如果对安全性考虑,还要在后台校验. springmvc使用JSR-303(javaEE6规范的一部分)校验规范,springmvc使用的是Hibernate Validator(和Hibernate的ORM) 二.步骤 2.1 引入 Hibernate Vali

  • 基于nginx设置浏览器协商缓存过程详解

    这篇文章主要介绍了基于nginx设置浏览器协商缓存过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 强缓存与协商缓存的区别 强缓存:浏览器不与服务端协商直接取浏览器缓存 协商缓存:浏览器会先向服务器确认资源的有效性后才决定是从缓存中取资源还是重新获取资源 协商缓存运作原理 现在有一个这样的业务情景:后端的静态资源会不定时地发生更新,而因为浏览器默认使用强缓存,会默认从浏览器缓存中取到过时的资源. 现在我们希望浏览器每次获取资源的时候都向后

  • nginx搭建jsdelivr镜像站过程详解

    目录 创建 jsdelivr 镜像站 使用 jsdelivr 镜像站 ​最近 jsdelivr 可谓国内站长圈的头条常客,这不,又双叒叕(yòu shuāng ruò zhuó)打不开了. 如何解决这个问题?最简单的方法当然是使用别人建立的jsd镜像站,但是稳定性和可靠性就只能看镜像站长的心情了吧.自己动手丰衣足食,还是自己搞个镜像吧. 创建 jsdelivr 镜像站 首先,你需要有一台安装了 nginx 的服务器.推荐使用腾讯云轻量服务器的Matomo镜像,其中集成了最新稳定版 nginx.p

  • SpringMVC静态资源配置过程详解

    目录 springmvc静态资源配置 1. 在java配置文件中配置DefaultServletHttpRequestHandler来进行处理 2. 在java配置文件中配置ResourceHttpRequestHandler来进行处理 3.  web.xml配置servlet映射 最后 补充 springmvc静态资源配置 <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>or

随机推荐