服务器之家

服务器之家 > 正文

Nginx与Tomcat实现动静态分离和负载均衡

时间:2019-11-15 16:02     来源/作者:魔流剑

本文介绍了Nginx与Tomcat实现动静态分离和负载均衡,所谓动静分离就是通过nginx(或apache等)来处理用户端请求的图片、html等静态的文件,tomcat(或weblogic)处理jsp、do等动态文件,从而达到动静页面访问时通过不同的容器来处理。

一.Nginx简介:

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

二.Nginx安装与配置

第一步:下载Nginx 安装包   http://nginx.org/en/download.html

第二步:在linux上安装Nginx

?
1
2
3
4
5
#tar zxvf nginx-1.7.8.tar.gz //解压
 
#cd nginx-1.7.8
 
#./configure --with-http_stub_status_module --with-http_ssl_module//启动server状态页和https模块

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

Nginx与Tomcat实现动静态分离和负载均衡

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

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

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

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

Nginx与Tomcat实现动静态分离和负载均衡

第三步:在linux上安装PCRE

?
1
2
3
4
5
6
7
#tar zxvf pcre-8.10.tar.gz //解压
 
cd pcre-8.10
 
./configure
 
make && make install//编译并安装

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

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#user nobody;
worker_processes 1;
error_log logs/error.log;
pid    logs/nginx.pid;
 
events {
  use epoll;
  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 on; 
gzip_min_length 1k; 
gzip_buffers   4 16k; 
gzip_http_version 1.0; 
gzip_comp_level 2; 
gzip_types text/plain application/x-javascript text/css application/xml
gzip_vary on; 
  server {
    listen    80 default;
    server_name localhost;
    <span style="color:#ff0000;"> location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ //由nginx处理静态页面</span>
       
         root  /usr/tomcat/apache-tomcat-8081/webapps/ROOT
          expires   30d; //缓存到客户端30天
        
    error_page 404       /404.html;
 
    #redirect server error pages to the static page /50x.html
     
    error_page  500 502 503 504 /50x.html;
    location = /50x.html {
      root  html;
    }
     <span style="color:#ff0000;"> location ~ \.(jsp|do)$ {//所有jsp的动态请求都交给Tomcat处理 </span>
      <span style="color:#ff0000;"> proxy_pass http://192.168.74.129:8081; //来自jsp或者do的后缀的请求交给tomcat处理</span>
      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服务器传
    }
    
  
 
}

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

Nginx与Tomcat实现动静态分离和负载均衡

第三步:启动Nginx服务

 #sbin/nginx   如图所示:

Nginx与Tomcat实现动静态分离和负载均衡

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

Nginx与Tomcat实现动静态分离和负载均衡

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

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

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

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

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

Nginx与Tomcat实现动静态分离和负载均衡

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

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

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

Nginx与Tomcat实现动静态分离和负载均衡

相同的处理静态文件,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

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#user nobody;
worker_processes 1;
error_log logs/error.log;
pid    logs/nginx.pid;
 
events {
  use epoll;
  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 on; 
gzip_min_length 1k; 
gzip_buffers   4 16k; 
gzip_http_version 1.0; 
gzip_comp_level 2; 
gzip_types text/plain application/x-javascript text/css application/xml
gzip_vary on; 
<span style="color:#ff0000;">upstream localhost_server {
    ip_hash;
    server 192.168.74.129:8081;
    server 192.168.74.129:8082;
  }</span>
 
  server {
    listen    80 default;
    server_name localhost;
    <span style="color:#ff0000;"> location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ //由nginx处理静态页面</span>
       
         root  /usr/tomcat/apache-tomcat-8081/webapps/ROOT
          expires   30d; //缓存到客户端30天
        
    error_page 404       /404.html;
 
    #redirect server error pages to the static page /50x.html
     
    error_page  500 502 503 504 /50x.html;
    location = /50x.html {
      root  html;
    }
     <span style="color:#ff0000;">location ~ \.(jsp|do)$ {//所有jsp的动态请求都交给Tomcat处理 </span>
      <span style="color:#ff0000;">proxy_pass http://localhost_server; //来自jsp或者do的后缀的请求交给tomcat处理</span>
      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服务器传
    }
    
  
 
}

说明:

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

相关文章

热门资讯

玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分 2019-06-21
男生常说24816是什么意思?女生说13579是什么意思?
男生常说24816是什么意思?女生说13579是什么意思? 2019-09-17
配置IIS网站web服务器的安全策略配置解决方案
配置IIS网站web服务器的安全策略配置解决方案 2019-05-23
Nginx服务器究竟是怎么执行PHP项目
Nginx服务器究竟是怎么执行PHP项目 2019-05-24
运维必须知道的关于云服务器的十个问题
运维必须知道的关于云服务器的十个问题 2019-05-24
返回顶部

361
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40