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 plaincopy
  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 plaincopy
  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 同时使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/282394.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Beanstalked的初步了解和使用(包括利用beanstalkd 秒杀消息队列的实现)

一 Beanstalkd 是什么 Beanstalkd&#xff0c;一个高性能、轻量级的分布式内存队列系统二 Beanstalkd 特性 1. 优先级&#xff08;priority&#xff09; 注&#xff1a;优先级就意味 支持任务插队&#xff08;数字越小&#xff0c;优先级越高&#xff0c;0的优先级最高&#…

WPF效果第二百篇之再玩Gamma曲线

前面效果中使用比较low的方式实现了2.4的Gamma曲线;虽说后面加了点动画呈现效果,但也就是个过渡版;今天才基本符合需求的效果:1、还是基于WPF效果第一百七十八篇之贝塞尔曲线他来实现的:3个ListBox 3个LandmarkControl2、在LandmarkControl增加插点位事件View:LandmarkControl …

skynet源码阅读5--协程调度模型

注&#xff1a;为方便理解&#xff0c;本文贴出的代码部分经过了缩减或展开&#xff0c;与实际skynet代码可能会有所出入。 作为一个skynet actor&#xff0c;在启动脚本被加载的过程中&#xff0c;总是要调用skynet.start和skynet.dispatch的&#xff0c;前者在skynet-os中…

ASP.NET Core GRPC 和 Dubbo 互通

一.前言Dubbo 是比较流行的服务治理框架&#xff0c;国内不少大厂都在使用。以前的 Dubbo 使用的是私有协议&#xff0c;采集用的 hessian 序列化&#xff0c;对于多语言生态来说是极度的不友好。现在 Dubbo 发布了新版本 v3&#xff0c;推出了基于 gRPC 的新协议 Triple&#…

详解C# 迭代器

[引用&#xff1a;https://www.cnblogs.com/yangecnu/archive/2012/03/17/2402432.html] 迭代器模式是设计模式中行为模式(behavioral pattern)的一个例子&#xff0c;他是一种简化对象间通讯的模式&#xff0c;也是一种非常容易理解和使用的模式。简单来说&#xff0c;迭代器模…

利用redis List队列简单实现秒杀 PHP代码实现

一 生产者producer部分 --------------------------------producer 部分注释------------------------------------------------------------ 用户在页面请求之后, 获取到用户uid , 跳转到这个加入队列的方法 (这里直接在producer中模拟了多个uid) 在方法内部判断redis队列长…

使用Filezilla 与 linux远程服务器传输文件时,设置默认打开编辑器

1. 点击编辑 2. 选择设置&#xff0c;点击文本编辑 3. 设置编辑器目录 4. 确定作用&#xff1a; 这样设置之后&#xff0c;可以实现在远程站点栏直接下载并使用phpstorm编辑的作用 正常需要下载之后&#xff0c;再去本地相应下载目录打开&#xff0c;然后再进行上传文件&#x…

在 .NET 中使用 FluentValidation 进行参数验证

不用说&#xff0c;参数验证很重要&#xff0c;无效的参数&#xff0c;可能会导致程序的异常。如果使用Web API或MVC页面&#xff0c;那么可能习惯了自带的规则验证&#xff0c;我们的控制器很干净&#xff1a;public class User {[Required]public string FirstName { get; se…

在win10系统下怎样快速切换任务视图

2019独角兽企业重金招聘Python工程师标准>>> 切换窗口&#xff1a;Alt Tab 任务视图&#xff1a;Win Tab (松开键盘界面不会消失) 切换任务视图&#xff1a;Win Ctrl 左/右 创建新的虚拟桌面&#xff1a;Win Ctrl D 关闭当前虚拟桌面&#xff1a;Win Ctrl F4…

Linux上搭建Samba,实现windows与Linux文件数据同步

一 环境介绍 1. 本地win10 2. Linux (centos7.4) 注&#xff1a;因为运营商方面禁止smb协议&#xff0c;导致无法在云服务器上使用smb&#xff0c;如果不是在虚拟机上操作&#xff0c;而是在云服务器上操作&#xff0c;建议还是使用 filezillaxshell组合 或者 使用finalshell等…

A5-1和DES两个加密算法的学习

A5-1加密算法 1、基本原理 A5-1加密算法是一种流password&#xff0c;通过密钥流对明文进行加密。然后用密钥流进行对密文的解密操作。 这样的算法主要用于GSM加密。也就是我们平时打电话的时候。通信数据发送到基站&#xff0c;基站发送到还有一个基站&#xff0c;基站发送到接…

从0到1简易区块链开发手册V0.3-数据持久化与创世区块

Author: brucefeng Email: brucefengbrucefeng.com 编程语言:Golang 1.BoltDB简介 Bolt是一个纯粹Key/Value模型的程序。该项目的目标是为不需要完整数据库服务器&#xff08;如Postgres或MySQL&#xff09;的项目提供一个简单&#xff0c;快速&#xff0c;可靠的数据库。 Bolt…

ELK之elasticsearch5.6的安装和head插件的安装

这里选择的elasticsearch为5.6的新版本&#xff0c;根据官方文档有几种暗装方式&#xff1a; https://www.elastic.co/guide/en/elasticsearch/reference/current/install-elasticsearch.html 这里选择rpm包安装https://www.elastic.co/guide/en/elasticsearch/reference/curre…

Nginx 基础(一)

一 、Nginx简述 Nginx是一个开源、高性能、可靠的HTTP中间件、代理服务。二 、常见的HTTP服务 1. HTTPD-Apache基金会 2. IIS-微软 3. GWS-Google 4. Nginx三、为什么选择Nginx 原因一&#xff1a;IO多路复用epoll &#xff08;主要解决了并发性的问题&#xff09; 注1&#xf…

ASP.NET Core高性能服务器HTTP.SYS

如果我们只需要将ASP.NET CORE应用部署到Windows环境下&#xff0c;并且希望获得更好的性能&#xff0c;那么我们选择的服务器类型应该是HTTP.SYS。Windows环境下任何针对HTTP的网络监听器/服务器在性能上都无法与HTTP.SYS比肩。[本文节选《ASP.NET Core 6框架揭秘》第18章]一、…

Nginx 基础 ( 二)

一、HTTP请求 http请求包括客户端请求服务端 以及 服务端响应数据回客户端&#xff0c;如下 请求&#xff1a;包括请求行、请求头部、请求数据 响应&#xff1a;包括状态行、消息报头、响应正文 比如在Linux中curl请求网站获取请求信息和响应信息 curl -v http://www.kugou.com…

《金融行业应用解决方案白皮书》发布,金融自主创新未来可期!

日前&#xff0c;以“聚势赋能 行业共创”为主题的金融行业解决方案发布会在线上举行。麒麟软件发布《金融行业应用解决方案白皮书》&#xff0c;并发起成立“金融机具生态圈俱乐部”&#xff0c;助力金融行业用户高质量发展。金融信息系统曾经被国外厂商垄断金融信息系统作为国…

leetcode53 Maximum Subarray 最大连续子数组

题目要求 Find the contiguous subarray within an array (containing at least one number) which has the largest sum.For example, given the array [-2,1,-3,4,-1,2,1,-5,4], the contiguous subarray [4,-1,2,1] has the largest sum 6.即&#xff1a;寻找数列中的一个子…

详解go语言的array和slice 【二】

上一篇 详解go语言的array和slice 【一】已经讲解过,array和slice的一些基本用法&#xff0c;使用array和slice时需要注意的地方&#xff0c;特别是slice需要注意的地方比较多。上一篇的最后讲解到创建新的slice时使用第三个索引来限制slice的容量&#xff0c;在操作新slice时…

详解Objective-C的meta-class

2019独角兽企业重金招聘Python工程师标准>>> 比较简单的一篇英文&#xff0c;重点是讲解meta-class。翻译下&#xff0c;加深理解。 原文标题&#xff1a;What is a meta-class in Objective-C? 原文地址&#xff1a;http://www.cocoawithlove.com/2010/01/what-is…