当前位置 主页 > 服务器问题 > nginx问题汇总 >

    nginx实现tomcat动静分离详解

    栏目:nginx问题汇总 时间:2018-10-18 16:52

    本篇文章主要介绍了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;     }   }