• Nginx +Tomcat 实现动静态分离(转)


    Nginx +Tomcat 实现动静态分离

       动静态分离就是Nginx处理客户端的请求的静态页面(html页面)或者图片,Tomcat处理客户端请求的动态页面(jsp页面),因为Nginx处理的静态页面的效率高于Tomcat。

    一.Nginx简介:

       Nginx一个高性能的HTTP和反向代理服务器, 具有很高的稳定性和支持热部署、模块扩展也很容易。当遇到访问的峰值,或者有人恶意发起慢速连接时,也很可能会导致服务器物理内存耗尽频繁交换,失去响应,只能重启服务器,Nginx采取了分阶段资源分配技术,处理静态文件和无缓存的反向代理加速,实现了负载均衡和容错,在这样高并发的访问情况下,能经受起高并发的处理。

    二.Nginx安装与配置

      第一步:下载Nginx 安装包 

         http://nginx.org/en/download.html

      第二步:在Linux上安装Nginx 

        1.#tar zxvf nginx-1.7.8.tar.gz  //解压

        2.#cd nginx-1.7.8

        3.#./configure --with-http_stub_status_module --with-http_ssl_module//启动server状态页和https模块

    会报缺少PCRE library错误,如图所示:

    这时先执行第三步安装PCRE ,然后在3执行一下,这就可以了

       4.make && make install //编译并安装

       5.测试一下安装配置是否正确,Nginx安装在/usr/local/nginx

        #/usr/local/nginx/sbin/nginx -t,如图所示:

        

      第三步:在linux上安装PCRE 

        1.#tar zxvf pcre-8.10.tar.gz  //解压

        2.cd pcre-8.10

        3../configure

        4.make && make install//编译并安装

    三.Nginx +Tomcat 实现动静态分离

       动静态分离就是Nginx处理客户端的请求的静态页面(html页面)或者图片,Tomcat处理客户端请求的动态页面(jsp页面),因为Nginx处理的静态页面的效率高于Tomcat。

      第一步:我们要配置Nginx文件

     #vi /usr/local/nginx/conf/nginx.conf

    [java] view plain copy
     
    1. #user  nobody;  
    2. worker_processes  1;  
    3. error_log  logs/error.log;  
    4. pid       logs/nginx.pid;  
    5.   
    6. events {  
    7.     use epoll;  
    8.     worker_connections  1024;  
    9. }  
    10.   
    11.   
    12. http {  
    13.     include       mime.types;  
    14.     default_type  application/octet-stream;  
    15.     log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '  
    16.                      '$status $body_bytes_sent "$http_referer" '  
    17.                      '"$http_user_agent" "$http_x_forwarded_for"';  
    18.   
    19.     access_log  logs/access.log  main;  
    20.     sendfile        on;  
    21. keepalive_timeout  65;  
    22. gzip on;    
    23. gzip_min_length  1k;    
    24. gzip_buffers     4  16k;    
    25. gzip_http_version 1.0;    
    26. gzip_comp_level 2;    
    27. gzip_types  text/plain application/x-javascript text/css application/xml;    
    28. gzip_vary on;    
    29.     server {  
    30.         listen       80 default;  
    31.         server_name  localhost;  
    32.         <span style="color:#ff0000;"> location ~ .*.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ //由nginx处理静态页面</span>  
    33.              {   
    34.                   root   /usr/tomcat/apache-tomcat-8081/webapps/ROOT;   
    35.                    expires      30d; //缓存到客户端30天  
    36.                }   
    37.         error_page  404              /404.html;  
    38.   
    39.         #redirect server error pages to the static page /50x.html  
    40.           
    41.         error_page   500 502 503 504  /50x.html;  
    42.         location = /50x.html {  
    43.             root   html;  
    44.         }  
    45.          <span style="color:#ff0000;"> location ~  .(jsp|do)$  {//所有jsp的动态请求都交给Tomcat处理 </span>  
    46.            <span style="color:#ff0000;"> proxy_pass http://192.168.74.129:8081;  //来自jsp或者do的后缀的请求交给tomcat处理</span>  
    47.             proxy_redirect off;  
    48.             proxy_set_header Host $host;    //后端的Web服务器可以通过X-Forwarded-For获取用户真实IP  
    49.             proxy_set_header X-Real-IP $remote_addr;  
    50.             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
    51.             client_max_body_size 10m;   //允许客户端请求的最大单文件字节数  
    52.             client_body_buffer_size 128k; //缓冲区代理缓冲用户端请求的最大字节数  
    53.              proxy_connect_timeout 90;   //nginx跟后端服务器连接超时时间  
    54.              proxy_read_timeout 90;     //连接成功后,后端服务器响应时间  
    55.              proxy_buffer_size 4k;      //设置代理服务器(nginx)保存用户头信息的缓冲区大小  
    56.              proxy_buffers  6  32k;       //proxy_buffers缓冲区,网页平均在32k以下的话,这样设置  
    57.             proxy_busy_buffers_size 64k;//高负荷下缓冲大小(proxy_buffers*2)  
    58.            proxy_temp_file_write_size 64k; //设定缓存文件夹大小,大于这个值,将从upstream服务器传  
    59.         }  
    60.         
    61.     }    
    62.   
    63. }  

     第二步:在tomcat 下的webapps/ROOT下新建index.html静态页面,如图所示:

      第三步:启动Nginx服务

      #sbin/nginx   如图所示:

       

     第四步:我们页面访问http://192.168.74.129/index.html 能正常显示正常的内容,如图所示:

       

      

     第五步:测试Nginx 和Tomcat高并发的情况下处理静态页面性能如何?

        采用了 Linux  ab网站压力测试命令来测试一下性能

       1.测试一下Nginx 处理静态页面的性能

         ab -c 100 -n 1000 http://192.168.74.129/index.html

         这个表示同时处理100个请求并运行1000次index.html文件,如图所示:

         

       2.测试一下Tomcat处理静态页面的性能

         ab -c 100 -n 1000 http://192.168.74.129:8081/index.html

         这个表示同时处理100个请求并运行1000次index.html文件,如图所示:

         

       相同的处理静态文件,Nginx处理的静态性能比Tomcat 好。Nginx每秒能请求5388次,而tomcat只请求2609次。

    总结:我们在Nginx配置文件中,配置静态交给Nginx处理,动态请求交给Tomcat,提供了性能。

    四.Nginx +Tomcat 负载均衡与容错

      我们在高并发的情况下,为了提高服务器的性能,减少了单台服务器的并发压力,我们采用了集群部署,还能解决为了避免单台服务器挂掉,服务不能访问这种情况下,处理容错问题。

     第一步:我们这边部署了两天tomcat服务器,192.168.74.129:8081和192.168.74.129:8082

     

     第二步:Nginx作为了代理服务器,客服端请求服务器端时,采用了负载均衡来处理,这样就能平均的把客服端请求分发到每一天服务器,这样减少服务器端的压力。配置Nginx下的nginx.conf文件。

       

      #vi /usr/local/nginx/conf/nginx.conf

        

    [java] view plain copy
     
    1. #user  nobody;  
    2. worker_processes  1;  
    3. error_log  logs/error.log;  
    4. pid       logs/nginx.pid;  
    5.   
    6. events {  
    7.     use epoll;  
    8.     worker_connections  1024;  
    9. }  
    10.   
    11.   
    12. http {  
    13.     include       mime.types;  
    14.     default_type  application/octet-stream;  
    15.     log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '  
    16.                      '$status $body_bytes_sent "$http_referer" '  
    17.                      '"$http_user_agent" "$http_x_forwarded_for"';  
    18.   
    19.     access_log  logs/access.log  main;  
    20.     sendfile        on;  
    21. keepalive_timeout  65;  
    22. gzip on;    
    23. gzip_min_length  1k;    
    24. gzip_buffers     4  16k;    
    25. gzip_http_version 1.0;    
    26. gzip_comp_level 2;    
    27. gzip_types  text/plain application/x-javascript text/css application/xml;    
    28. gzip_vary on;    
    29. <span style="color:#ff0000;">upstream localhost_server {  
    30.         ip_hash;  
    31.         server 192.168.74.129:8081;  
    32.         server 192.168.74.129:8082;  
    33.     }</span>  
    34.   
    35.     server {  
    36.         listen       80 default;  
    37.         server_name  localhost;  
    38.        <span style="color:#ff0000;">  location ~ .*.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ //由nginx处理静态页面</span>  
    39.              {   
    40.                   root   /usr/tomcat/apache-tomcat-8081/webapps/ROOT;   
    41.                    expires      30d; //缓存到客户端30天  
    42.                }   
    43.         error_page  404              /404.html;  
    44.   
    45.         #redirect server error pages to the static page /50x.html  
    46.           
    47.         error_page   500 502 503 504  /50x.html;  
    48.         location = /50x.html {  
    49.             root   html;  
    50.         }  
    51.           <span style="color:#ff0000;">location ~  .(jsp|do)$  {//所有jsp的动态请求都交给Tomcat处理 </span>  
    52.            <span style="color:#ff0000;">proxy_pass http://localhost_server;  //来自jsp或者do的后缀的请求交给tomcat处理</span>  
    53.             proxy_redirect off;  
    54.             proxy_set_header Host $host;    //后端的Web服务器可以通过X-Forwarded-For获取用户真实IP  
    55.             proxy_set_header X-Real-IP $remote_addr;  
    56.             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
    57.             client_max_body_size 10m;   //允许客户端请求的最大单文件字节数  
    58.             client_body_buffer_size 128k; //缓冲区代理缓冲用户端请求的最大字节数  
    59.              proxy_connect_timeout 90;   //nginx跟后端服务器连接超时时间  
    60.              proxy_read_timeout 90;     //连接成功后,后端服务器响应时间  
    61.              proxy_buffer_size 4k;      //设置代理服务器(nginx)保存用户头信息的缓冲区大小  
    62.              proxy_buffers  6  32k;       //proxy_buffers缓冲区,网页平均在32k以下的话,这样设置  
    63.             proxy_busy_buffers_size 64k;//高负荷下缓冲大小(proxy_buffers*2)  
    64.            proxy_temp_file_write_size 64k; //设定缓存文件夹大小,大于这个值,将从upstream服务器传  
    65.         }  
    66.         
    67.     }    
    68.   
    69. }  

    说明:

       1.upstream 中的server是指向服务器的IP(域名)和端口,后面还可以带参数

         1)weight :设置服务器的转发权重 默认值是1。

         2)max_fails : 是与fail_timeout配合使用,是指在fail_timeout时间段内,如果服务器转发失败次数超过max_fails设置的值,这台服务器就不                     可用,max_fails默认值是1

        3)fail_timeout :表示在该时间段内转发失败多少次就认为这台服务器不能用。

        4)down:表示这台服务器不能用。

         5)backup:表示使ip_hash设置的针对这台服务器无效,只有在所有非备份的服务器都失效后,才会向服务器转发请求。

      2.ip_hash 设置是在集群的服务器中,如果同一个客户端请求转发到多个服务器上,每台服务器可能缓存同一份信息,这会造成资源的浪费,采用的ip_hash设置会把同一个客户端第二次请求相同的信息时,会转发到第一次请求的服务器端。但ip_hash不能和weight 同时使用。

  • 相关阅读:
    Java实现 LeetCode 455 分发饼干
    Java实现 LeetCode 455 分发饼干
    Java实现 LeetCode 455 分发饼干
    Java实现 LeetCode 454 四数相加 II
    Java实现 LeetCode 454 四数相加 II
    Java实现 LeetCode 454 四数相加 II
    FFmpeg解码H264及swscale缩放详解
    linux中cat more less head tail 命令区别
    C语言字符串操作总结大全(超详细)
    如何使用eclipse进行嵌入式Linux的开发
  • 原文地址:https://www.cnblogs.com/panxuejun/p/6688536.html
Copyright © 2020-2023  润新知