博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Nginx与Tomcat实现请求动态数据与请求静态资源的分离
阅读量:6255 次
发布时间:2019-06-22

本文共 7211 字,大约阅读时间需要 24 分钟。

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

一、认识访问静态资源与访问动态资源的区别

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

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

  

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

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

 

二、请求动态数据与请求静态资源的分离的必要性

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

   

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

三、Nginx配置方法

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

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

sudo find / -name nginx.conf

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

  先来一个全部配置:

  

1 # user www www;  2 user root root;  3   4 worker_processes 2; #设置值和CPU核心数一致  5   6 error_log /home/zuoyu/ServerComputer/nginx/logs/nginx_error.log crit; #日志位置和日志级别  7   8   9 pid /home/zuoyu/ServerComputer/nginx/nginx.pid; 10  11 worker_rlimit_nofile 65535; 12  13 events { 14     #使用epoll模型提高性能 15     use epoll; 16     #单个进程最大连接数 17     worker_connections 65535; 18 } 19  20  21 http { 22     #扩展名与文件类型映射表 23     include       mime.types; 24     #默认类型 25     default_type  application/octet-stream; 26  27     log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ' 28                       '$status $body_bytes_sent "$http_referer" ' 29                       '"$http_user_agent" "$http_x_forwarded_for"'; 30  31     client_header_buffer_size 32k; 32     large_client_header_buffers 4 32k; 33     client_max_body_size 8m; 34     types_hash_max_size 2048; 35     types_hash_bucket_size 128; 36       37     sendfile on; 38     tcp_nopush on; 39     keepalive_timeout 60; 40     tcp_nodelay on; 41     fastcgi_connect_timeout 300; 42     fastcgi_send_timeout 300; 43     fastcgi_read_timeout 300; 44     fastcgi_buffer_size 64k; 45     fastcgi_buffers 4 64k; 46     fastcgi_busy_buffers_size 128k; 47     fastcgi_temp_file_write_size 128k; 48     # 解压缩传输 49     gzip on;  50     gzip_min_length 1k; 51     gzip_buffers 4 16k; 52     gzip_http_version 1.0; 53     gzip_comp_level 2; 54     gzip_types text/plain application/x-javascript text/css application/xml; 55     gzip_vary on; 56  57     #负载均衡组 58     #静态服务器组 59     upstream static.zuoyu.com { 60         server localhost:81; 61     } 62  63     #动态服务器组 64     upstream dynamic.zuoyu.com { 65         server localhost:8080; 66         # server localhost:8081; 67         # server localhost:8082; 68         # server localhost:8083; 69     } 70  71     #配置代理参数 72     proxy_redirect off; 73     proxy_set_header HOST $host; 74     proxy_set_header X-Real-IP $remote_addr; 75     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 76     # client_max_body_size 10m; 77     client_body_buffer_size 128k; 78     proxy_connect_timeout 90; 79     proxy_send_timeout 90; 80     proxy_read_timeout 90; 81     proxy_buffer_size 16k; 82     proxy_buffers 4 32k; 83     proxy_busy_buffers_size 64k; 84     proxy_temp_file_write_size 64k; 85      86     #缓存配置 87     proxy_cache_key '$host:$server_port$request_uri'; 88     # proxy_temp_file_write_size 64k; 89     proxy_temp_path /home/zuoyu/ServerComputer/nginx/proxy_temp_path; 90     proxy_cache_path /home/zuoyu/ServerComputer/nginx/proxy_cache_path levels=1:2 keys_zone=cache_one:200m inactive=5d max_size=1g; 91     proxy_ignore_headers X-Accel-Expires Expires Cache-Control Set-Cookie; 92  93     #静态资源主机 94     server { 95         listen 81; 96         server_name localhost_0; 97         charset utf8; 98  99         location / {100             root /home/zuoyu/Public/NginxStaticSource/static;101         }102     }103     # 下面是server虚拟主机的配置104     server {105         listen 80;#监听端口106         server_name localhost_1;#域名107         charset utf8;108 109         location / {110             # root   /usr/share/nginx/html;111             proxy_pass http://dynamic.zuoyu.com;112             index  index.html index.jsp;113         }114 115 116         location ~ .*\.(jsp|do|action)$117         {118             index index.jsp;119             proxy_pass http://dynamic.zuoyu.com;120             121         }122 123     124 125         location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|ico|svg)$126         {127             #缓存30天128             expires 30d;129             proxy_pass http://static.zuoyu.com;130             proxy_cache cache_one;131             proxy_cache_valid 200 304 302 5d;132             proxy_cache_valid any 5d;133             proxy_cache_key '$host:$server_port$request_uri';134             add_header X-Cache '$upstream_cache_status from $host';135         }136 137         location ~ .*\.(ttf|woff|woff2)$138         {139             #缓存30天140             expires 30d;141             proxy_pass http://static.zuoyu.com;142             proxy_cache cache_one;143             proxy_cache_valid 200 304 302 5d;144             proxy_cache_valid any 5d;145             proxy_cache_key '$host:$server_port$request_uri';146             add_header X-Cache '$upstream_cache_status from $host';147         }148 149         location ~ .*\.(js|css)$150         {151             #缓存7天152             expires 7d;153             proxy_pass http://static.zuoyu.com;154             proxy_cache cache_one;155             proxy_cache_valid 200 304 302 5d;156             proxy_cache_valid any 5d;157             proxy_cache_key '$host:$server_port$request_uri';158             add_header X-Cache '$upstream_cache_status from $host';159         }160 161         #其他页面反向代理到tomcat容器162         location ~ .*$ {163             index index.jsp index.html;164             proxy_pass http://dynamic.zuoyu.com;165         }166         access_log off;    167         error_page   500 502 503 504  /50x.html;168 169         location = /50x.html {170             root   /usr/share/nginx/html;171         }172     }173 174     175 }176

  

  在这段配置文件中,不仅仅包含了静动态访问的分离,还包括缓存、资源压缩、负载均衡。在这里只分析静动态资源:

  静态资源配置

  以访问图片为例子:

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|ico|svg)$        {           root /home/zuoyu/Public/NginxStaticSource/static;         }

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

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

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|ico|svg)$        {            proxy_pass http://localhost:81;        }

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

  动态数据配置

  我们就以访问JSP页面、do请求、action请求为例子

location ~ .*\.(jsp|do|action)$        {            index index.jsp;            proxy_pass http://localhost:8080;                    }

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

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

 

  如此一来,就实现了动静分离。当用户的浏览器加载页面时,那些css文件、js文件、字体样式、图片等等都会由Nginx服务器直接从本地硬盘取出返回给用户浏览器;而用户名等等信息会由nginx交给Tomcat处理后返回给Nginx,Nginx返回到用户浏览器。

  怕什么真理无穷,进一寸有进一寸的欢喜。

  

  

  

转载于:https://www.cnblogs.com/1214804270hacker/p/9299462.html

你可能感兴趣的文章
26期20180627 更换国内源 yum下载rpm包 源码包安装
查看>>
使用阿里云的k8s部署访问环境
查看>>
大数据工程师微职位学习分享
查看>>
企业使用云服务器的优势
查看>>
dubbo Servlet Bridge Server时同时支持hessian和webservice
查看>>
lanmp一键安装包安装说明(包括lamp,lnmp,lnamp安装)
查看>>
Shell命令-文件及内容处理之head、tail
查看>>
aws上的vsftp服务的坎坷经历
查看>>
关于SVN 目录结构(2)
查看>>
Android碎碎念 -- 视频播放器
查看>>
关于51单片机“外部中断触发方式”的经验总结
查看>>
2.文件管理
查看>>
Oracle中TO_DATE TO_CHAR格式
查看>>
oracle的触发器增删改实例
查看>>
hive 自定义函数 udf
查看>>
哈哈校园[上海]招募Java/J2EE工程师
查看>>
Docker在CentOS 7 环境下的安装及基本操作入门
查看>>
【Spring Boot 系列 自定义启动器Starter】
查看>>
Centos 7.4版本升级内核3.10+ 到4+过程
查看>>
ssh 免密码登录的设置遇到问题
查看>>