nginx实现tomcat动静分离详解

 更新时间:2017年06月15日 09:06:21   作者:浮云中的毛驴  
本篇文章主要介绍了nginx实现tomcat动静分离详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

1.为什么要实现动静分离

1)nginx的处理静态资源能力超强

主要是nginx处理静态页面的效率远高于tomcat的处理能力,如果tomcat的请求量为1000次,则nginx的请求量为6000次,tomcat每秒的吞吐量为0.6M,nginx的每秒吞吐量为3.6M,可以说,nginx处理静态资源的能力是tomcat处理能力的6倍,优势可见一斑。

2)动态资源和静态资源分开,使服务器结构更清晰。

2.动静分离原理

服务端接收来自客户端的请求中,有一部分是静态资源的请求,例如html,css,js和图片资源等等,有一部分是动态数据的请求。因为tomcat处理静态资源的速度比较慢,所以我们可以考虑把所有静态资源独立开来,交给处理静态资源更快的服务器例如nginx处理,而把动态请求交给tomcat处理。

如下图所示,我们在机器上同时安装了nginx和tomcat,把所有的静态资源都放置在nginx的webroot目录下面,把动态请求的程序都放在tomcat的webroot目录下面,当客户端访问服务端的时候,如果是静态资源的请求,就直接到nginx的webroot目录下面获取资源,如果是动态资源的请求,nginx利用反向代理的原理,把请求转发给tomcat进行处理,这样就实现了动静分离,提高了服务器处理请求的性能。

3.动静分离的详细配置

1)首先熟悉下nginx的重要配置文件nginx.conf

user nginx; 
worker_processes 1; 
error_log logs/error.log; 
pid    logs/nginx.pid; 
events { 
  worker_connections 1024; 
} 
http { 
  include    mime.types; 
  default_type application/octet-stream; 
  #日志格式定义 
  log_format main '$remote_addr - $remote_user[$time_local] "$request" ' 
           '$status $body_bytes_sent"$http_referer" ' 
           '"$http_user_agent" "$http_x_forwarded_for"'; 
  access_log logs/access.log main; 
  sendfile    on; 
  keepalive_timeout 65; 
  #gzip压缩功能设置 
  gzip on; 
  gzip_min_length 1k; 
  gzip_buffers  4 16k; 
  gzip_http_version 1.0; 
  gzip_comp_level 2; 
  gzip_types text/plain application/x-javascripttext/css application/xml; 
  gzip_vary on; 
  server { 
    listen    80; 
    server_name www.test.com; 
    location / { 
  #jsp网站程序根目录,一般nginx与tomcat在同一个目录 
      root /usr/local/tomcat/webapps/ROOT; 
      index index.html index.jsp index.html; 
    } 
    location ~ .*.jsp$ { 
    index index.jsp; 
    proxy_pass http://127.0.0.1:8080;  #来自jsp请求交给tomcat处理 
    proxy_redirect off; 
    proxy_set_header Host $host;  #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    client_max_body_size 10m;  #允许客户端请求的最大单文件字节数 
    client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数 
    proxy_connect_timeout 90;  #nginx跟后端服务器连接超时时间(代理连接超时) 
    proxy_read_timeout 90;   #连接成功后,后端服务器响应时间(代理接收超时) 
    proxy_buffer_size 4k;    #设置代理服务器(nginx)保存用户头信息的缓冲区大小 
    proxy_buffers 6 32k;    #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置 
    proxy_busy_buffers_size 64k;#高负荷下缓冲大小(proxy_buffers*2) 
    proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传 
    } 
    location ~ .*\.(gif|jpg|png|bmp|swf)$  #由nginx处理静态页面 
    { 
    expires 30d;  #使用expires缓存模块,缓存到客户端30天 
    } 
    location ~ .*\.( jsp|js|css)?$ 
    { 
    expires 1d; 
    } 
    error_page 404       /404.html;  #错误页面 
    error_page  500 502 503 504 /50x.html; 
    location = /50x.html { 
      root  html; 
    } 
  } 

2)配置动静分离

    #配置Nginx动静分离,定义的静态页面直接从Nginx发布目录读取。 
location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ { 
  root /webapps/myproject/code/static-resource; 
      #expires定义用户浏览器缓存的时间为7天,如果静态页面不常更新,可以设置更长,这样可以节省带宽和缓解服务器的压力 
  expires 1d; 
} 
location ~ ^/(WEB-INF)/ {#这个很重要,不然用户就可以访问了 
      deny all;  
    } 

这里需要注意,外部静态文件的存放路径,应当与请求中路径一致,以免nginx拼接路径后,由于路径不存在而找不到文件。如果出现js、css等不加载的情况,可以查看nginx的errorlog进行调试修正,日志位于nginx目录下的logs目录内,如下截取一段错误的日志:

复制代码 代码如下:

[error] 7195#0: *1693 open() "/home/cms/include/dedeajax2.js" failed (2: No such file or directory), client: 101.226.35.225, server: localhost, request: "GET /cms/include/dedeajax2.js HTTP/1.1"   

可以看到,GET请求是 “ /cms/include/dedeajax2.js ”,这时nginx就会在配置中的 /home 下,寻找这一路径的文件,完整路径为:

/home/cms/include/dedeajax2.js 

报错为 no such file or directory ,就可以在对应的 /home 目录下看文件路径的问题。

配置成功后,就可以发现静态文件通过nginx处理了,静态文件的请求不再进入tomcat服务器,从而可以打包时,静态文件的目录如js、css等不再打进war包。

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

相关文章

  • 使用Nginx搭载rtmp直播服务器的方法

    使用Nginx搭载rtmp直播服务器的方法

    这次我们搭建一个rtmp直播服务器,用于电脑或手机直播推流到服务器,然后其他终端如电脑或手机可以观看直播的视频画面。接下来通过本文给大家分享使用Nginx搭载rtmp直播服务器的问题,感兴趣的朋友一起看看吧
    2021-10-10
  • Nginx 禁止IP访问 只允许域名访问

    Nginx 禁止IP访问 只允许域名访问

    今天要在Nginx上设置禁止通过IP访问服务器,只能通过域名访问,这样做是为了避免别人把未备案的域名解析到自己的服务器IP而导致服务器被断网,从网络上搜到以下解决方案
    2016-09-09
  • Nginx-rewrite模块概述

    Nginx-rewrite模块概述

    从功能上看 rewrite 和 location 似乎有点像,都能实现跳转,主要区别在于 rewrite 是在同一域名内更改获取资源的路径,这篇文章主要介绍了Nginx-rewrite模块详细介绍,需要的朋友可以参考下
    2023-06-06
  • Nginx之rewrite重写的具体使用

    Nginx之rewrite重写的具体使用

    访问重写rewrite是Nginx HTTP请求处理过程中的一个重要功能,本文主要介绍了Nginx之rewrite重写的具体使用,具有一定的参考价值,感兴趣的可以了解一下
    2024-05-05
  • nginx基于域名,端口,不同IP的虚拟主机设置的实现

    nginx基于域名,端口,不同IP的虚拟主机设置的实现

    这篇文章主要介绍了nginx基于域名,端口,不同IP的虚拟主机设置,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • nginx配置中$http_host、$host、$host:$proxy_port和$host:$server_port区别解析

    nginx配置中$http_host、$host、$host:$proxy_port和$host:$server_por

    nginx为了实现反向代理的需求而增加了一个ngx_http_proxy_module模块,其中proxy_set_header指令就是该模块需要读取的配置文件,这篇文章主要介绍了nginx配置中$http_host、$host、$host:$proxy_port和$host:$server_port区别,需要的朋友可以参考下
    2024-03-03
  • nginx优化的六点方法

    nginx优化的六点方法

    这篇文章主要介绍了nginx优化的六点方法,有对nginx优化不太熟悉的同学可以参考下
    2021-01-01
  • nginx设置资源缓存实战详解

    nginx设置资源缓存实战详解

    这篇文章主要介绍了nginx设置资源缓存实战详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • nginx服务器的下载安装与使用详解

    nginx服务器的下载安装与使用详解

    这篇文章主要介绍了nginx服务器的下载安装与使用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-07-07
  • nginx正向代理与反向代理详解

    nginx正向代理与反向代理详解

    本文给大家分享的是nginx实现正向代理和反向代理的具体方法配置以及不同的实例情况,非常的详细,希望大家能够喜欢
    2020-03-03

最新评论