Nginx + Tomcat实现请求动态数据和请求静态资源的分离详解

  

  

上篇博客说明了Nginx在应用架构中的作用,以及负载均衡的思路。这篇实践一下其中的访问静态资源与访问动态资源的操作。

  


  

  

静态资源:指存储在硬盘内的数据,固定的数据,不需要计算的数据。

  

如:图片,字体,js文件,css文件等等。在用户访问静态资源时,服务器会直接将这些资源返回到用户的计算机内。

  

动态资源:指需要服务器根据用户的操作所返回的数据,以及存储在数据库的数据,经过一系列逻辑计算后返回的数据。

  

如:请求明天的天气信息数据,请求查看账户余额。

  


  

  

Tomcat应用服务器是用来处理Servlet容器和JSP的,虽然它也可以处理HTML等等一系列静态资源,但是效率不如Nginx;而且对Servlet容器和JSP的运算已经有很大压力了,如果不分离会导致大量的性能浪费。说到底,在应用服务方面,要遵循一条原则,一个服务只做一件事。要做动态请求就专做动态请求,要做静态请求就专做静态请求,这样才能提高性能。

  

我们要做的,就是当用户访问静态资源时,让Nginx将静态资源返回给用户;当用户访问动态资源时,将访问转到Tomcat应用服务器上,Tomcat将数据返回给Nginx, Nginx再返回给用户。

  


  

  

在这里,对于Nginx的配置文件内的各项参数说明不多讲解,如需了解Nginx配置文件移步这里。

  

不知道配置文件位置的,一条指令:

        sudo找到/- name nginx.conf      

要善于利用Linux指令,这样就会无法自拔的爱上Linux;

  

先来一个全部配置:

        #用户www www;   用户根的根;      worker_processes 2;#设置值和CPU核心数一致      error_log/home/zuoyu/ServerComputer/nginx/logs/nginx_error。日志致命一击;#日志位置和日志级别         pid/home/zuoyu/ServerComputer/nginx/nginx.pid;      worker_rlimit_nofile 65535;      事件{   #使用epoll模型提高性能   使用epoll;   #单个进程最大连接数   worker_connections 65535;   }         http {   #扩展名与文件类型映射表   包括mime.types;   #默认类型   default_type应用程序/八进制;      log_format主要remote_addr - remote_user美元($ time_local]“请求”美元   ”地位body_bytes_sent美元美元http_referer”   “http_user_agent美元”“http_x_forwarded_for美元”;      client_header_buffer_size 32 k;   large_client_header_buffers 4 32 k;   client_max_body_size 8米;   types_hash_max_size 2048;   types_hash_bucket_size 128;      sendfile>   ~ . * \位置。(gif | jpg | jpeg | png | bmp | swf | ico | svg)美元   {   根/home/zuoyu/Public/NginxStaticSource/静态;   }      

当你访问虚拟主机地点:80时,当访问到以上述文件类型时,会去根/home/zuoyu/Public/NginxStaticSource/静态/目录下查找,比如你要访问根/home/zuoyu/Public/NginxStaticSource/静态/img/background.png这个图片,那么你只需要位置:80/img/background.png即可访问到该文件;

  

在我的配置中,又建立了一个主机,专门用来配置静态资源路径,这样就避免了换一次静态资源的目录要改好多个地方,只需修改主机路径就可以实现。便可以将上述图片配置修改为

        ~ . * \位置。(gif | jpg | jpeg | png | bmp | swf | ico | svg)美元   {   proxy_pass http://localhost: 81;   }      

这样便大大提高了灵活性,而且在负载均衡时更加容易实现。注意:必须将静态资源主机配置放在核心主机的上面才有效。

  

<强>动态数据配置
  

  

我们就以访问JSP页面,做请求,动作请求为例子

        ~ . * \位置。(jsp | |行动)美元   {   指数index . jsp。   proxy_pass http://localhost: 8080;      }      

这个配置告诉了Nginx服务器:当有以jsp、做,行动为后缀的请求,就将该请求交给localhost: 8080;这个主机处理,这个主机的主页是index . jsp,这个就叫反向代理。这里设计到一个概念——代理与反向代理;代理通常需要在客户端配置,将本来要发送的请求转发到代理服务器;而反向代理要配置在服务器上,将本来要发送到本服务器上的请求转发到代理服务器上。

  

将所有需要Tomcat应用服务器处理的请求都交给Tomcat,剩下的让Nginx处理就好了,如果需要其他服务器的,再配置上就好了。

Nginx + Tomcat实现请求动态数据和请求静态资源的分离详解