当前位置: > Linux服务器 > 服务器设置 >

linux nginx1.9.2+tomcat8 配置 多tomcat负载均衡,并使静态文静不通过tomcat解析

时间:2016-06-16 01:39来源:linux.it.net.cn 作者:IT

本项目完成的任务,nginx1.9.2+tomcat8 配置 多tomcat负载均衡,并使静态文静不通过tomcat解析,而是直接通过nginx直接返回静态文件数据,提高响应时间,提高并发量。注意,在nginx.conf设置静态文件路径时,要确保此路径在本用户下有访问权限,最好设为chmod  7777 filename。

 

[html] view plain copy
 在CODE上查看代码片派生到我的代码片
  1.    
  2.   
  3. user  nobody;  
  4. worker_processes  1;  
  5.   
  6. #error_log  logs/error.log;  
  7. #error_log  logs/error.log  notice;  
  8. #error_log  logs/error.log  info;  
  9.   
  10. #pid        logs/nginx.pid;  
  11.   
  12.   
  13. events {  
  14.     worker_connections  1024;  
  15. }  
  16.   
  17.   
  18. http {  
  19.     include       mime.types;  
  20.     default_type  application/octet-stream;  
  21.   
  22.     #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '  
  23.     #                  '$status $body_bytes_sent "$http_referer" '  
  24.     #                  '"$http_user_agent" "$http_x_forwarded_for"';  
  25.   
  26.     #access_log  logs/access.log  main;  
  27.   
  28.     sendfile        on;  
  29.     #tcp_nopush     on;  
  30.   
  31.     #keepalive_timeout  0;  
  32.     keepalive_timeout  65;  
  33.   
  34.     #gzip  on;  
  35.     upstream lhy {  
  36.           #配置两台tomcat负载均衡,ip:port地址为tomcat地址。weight为权重,权重越大,访问概率越大,  
  37.          server 192.168.1.106:8080 weight=10;  
  38.          server 192.168.1.106:8090 weight=10;  
  39.          }  
  40.     server {  
  41.         listen       80;  
  42.         server_name  localhost;  
  43.   
  44.         #charset koi8-r;  
  45.   
  46.       #  access_log  logs/host.access.log  main;  
  47.     location ~ .*\.(gif|jpg|jpeg|bmp|png|ico|txt|js|css)$  
  48.              {  
  49.                   root /home/lhy/nginx_data/;  
  50.                   #expires定义用户浏览器缓存的时间为7天,如果静态页面不常更新,可以设置更长,这样可以节省带宽和缓解服务器的压力  
  51.                    expires      7d;   
  52.                                                      
  53.               }   
  54.        location ~ (\.jsp)|(\.do)$  
  55.      {      
  56.              #root   html;  
  57.              #index  index.jsp index.htm;  
  58.          #lhy是 upstream 后面的名字 lhy  
  59.              proxy_pass http://lhy;  
  60.              #localhost是nginx服务器的主机地址,如果不写此句,会导致静态文件访问路径为http://lhy,导致找不到地址  
  61.            proxy_set_header Host localhost;    
  62.                 #forwarded信息,用于告诉后端服务器终端用户的ip地址,否则后端服务器只能获取前端代理服务器的ip地址。  
  63.             proxy_set_header Forwarded $remote_addr;    
  64.         }  
  65.   
  66.      # / 表示匹配所有地址,默认最大前缀匹配,如果其他没有匹配的才会匹配  
  67.         location /{  
  68.              root  /home/lhy;  
  69.               index  index.html index.htm;  
  70.                }  
  71.               
  72.         #error_page  404              /404.html;  
  73.   
  74.         # redirect server error pages to the static page /50x.html  
  75.         #错误页面地址,500 502 503 504错误的地址    
  76.         error_page   500 502 503 504  /50x.html;  
  77.         location = /50x.html {  
  78.             root   html;  
  79.         }  
  80.   
  81.         # proxy the PHP scripts to Apache listening on 127.0.0.1:80  
  82.         #  
  83.         #location ~ \.php$ {  
  84.         #    proxy_pass   http://127.0.0.1;  
  85.         #}  
  86.   
  87.         # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000  
  88.         #  
  89.         #location ~ \.php$ {  
  90.         #    root           html;  
  91.         #    fastcgi_pass   127.0.0.1:9000;  
  92.         #    fastcgi_index  index.php;  
  93.         #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;  
  94.         #    include        fastcgi_params;  
  95.         #}  
  96.   
  97.         # deny access to .htaccess files, if Apache's document root  
  98.         # concurs with nginx's one  
  99.         #  
  100.         #location ~ /\.ht {  
  101.         #    deny  all;  
  102.         #}  
  103.     }  
  104.   
  105.   
  106.     # another virtual host using mix of IP-, name-, and port-based configuration  
  107.     #  
  108.     #server {  
  109.     #    listen       8000;  
  110.     #    listen       somename:8080;  
  111.     #    server_name  somename  alias  another.alias;  
  112.   
  113.     #    location / {  
  114.     #        root   html;  
  115.     #        index  index.html index.htm;  
  116.     #    }  
  117.     #}  
  118.   
  119.   
  120.     # HTTPS server  
  121.     #  
  122.     #server {  
  123.     #    listen       443 ssl;  
  124.     #    server_name  localhost;  
  125.   
  126.     #    ssl_certificate      cert.pem;  
  127.     #    ssl_certificate_key  cert.key;  
  128.   
  129.     #    ssl_session_cache    shared:SSL:1m;  
  130.     #    ssl_session_timeout  5m;  
  131.   
  132.     #    ssl_ciphers  HIGH:!aNULL:!MD5;  
  133.     #    ssl_prefer_server_ciphers  on;  
  134.   
  135.     #    location / {  
  136.     #        root   html;  
  137.     #        index  index.html index.htm;  
  138.     #    }  
  139.     #}  
  140.   
  141. }  

 

路径转发

 

[html] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. server {  
  2.         listen       80;  
  3.         server_name   115.28.77.24;#本服务器ip地址  
  4.   
  5.         #charset koi8-r;  
  6.   
  7.         #access_log  logs/host.access.log  main;  
  8.   
  9.        # location /vpn/ {  
  10.        location /{  
  11.             #root   html;  
  12.             #index  index.html index.htm;  
  13.             proxy_pass http://10.8.0.66:8090/;  
  14.            #当地址最后加上 /时,匹配路径的 yanshi 不会加到转发路径中  
  15.             proxy_set_header X-Forwarded-For $remote_addr;  
  16.            #当下面这句话不加,Host $host; 会导致post请求参数丢失  
  17.             proxy_set_header Host $host;  
  18.             proxy_set_header X-Real-Ip $remote_addr;  
  19.         }  
[html] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. }  


 

同一服务器部署多个tomcat时,存在端口号冲突的问题,所以需要修改tomcat配置文件server.xml,以tomcat7为例。

  • 首先了解下tomcat的几个主要端口:

<Connector port="8080" protocol="HTTP/1.1"  connectionTimeout="60000"  redirectPort="8443" disableUploadTimeout="false"  executor="tomcatThreadPool" URIEncoding="UTF-8"/>

其中8080为HTTP端口,8443为HTTPS端口


<Server port="8005" shutdown="SHUTDOWN">   

8005为远程停服务端口

 

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> 

8009为AJP端口,APACHE能过AJP协议访问TOMCAT的8009端口。

 

  • 部署多个tomcat主要修改三个端口:

 

1.HTTP端口,默认8080,如下改为8081
[html] view plain copy
  1. <Connector port="8081" protocol="HTTP/1.1"   
  2.                connectionTimeout="60000"   
  3.                redirectPort="8443" disableUploadTimeout="false"  executor="tomcatThreadPool"  URIEncoding="UTF-8"/>  

 

2.远程停服务端口,默认8005,如下改为8006

[html] view plain copy
  1. <Server port="8006" shutdown="SHUTDOWN">......  

 

3.AJP端口,默认8009,如下改,8010

[html] view plain copy
  1. <Connector port="8010" protocol="AJP/1.3" redirectPort="8443" /> 

 

 

 

  nginx与tomcat的结合,主要用的是nginx中的upstream,后端可包括有多台tomcat来处ginx的upstream目前支持4种方式的分配

1、轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

2、weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 
例如:
    upstreambakend {
        server 192.168.0.14 weight=10;
        server 192.168.0.15 weight=10;
   }

2、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session 的问题。
例如:
    upstreambakend {
        ip_hash;
        server 192.168.0.14:88;
        server 192.168.0.15:80;
   }

3、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream backend {
    serverserver1;
    serverserver2;
    fair;
}

4、url_hash(第三方)

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

例:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法

upstream backend {
    serversquid1:3128;
    serversquid2:3128;
   hash   $request_uri;
    hash_methodcrc32;
}

tips:

upstream bakend{#定义负载均衡设备的Ip及设备状态
ip_hash;
    server127.0.0.1:9090 down;
    server127.0.0.1:8080 weight=2;
    server127.0.0.1:6060;
    server127.0.0.1:7070 backup;
}
在需要使用负载均衡的server中增加
proxy_pass http://bakend/;

每个设备的状态设置为:
1.down 表示单前的server暂时不参与负载
2.weight 默认为1.weight越大,负载的权重就越大。
3.max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
4.fail_timeout:max_fails次失败后,暂停的时间。
5.backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

nginx支持同时设置多组的负载均衡,用来给不用的server来使用。

client_body_in_file_only 设置为On 可以讲clientpost过来的数据记录到文件中用来做debug
client_body_temp_path 设置记录文件的目录 可以设置最多3层目录

location 对URL进行匹配.可以进行重定向或者进行新的代理 负载均衡


(责任编辑:IT)
------分隔线----------------------------