1. 程式人生 > >window下nginx 1.7.4 做多個tomcat負載均衡

window下nginx 1.7.4 做多個tomcat負載均衡

1、下載最新版nginx

     http://nginx.org/download/nginx-1.7.4.zip

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

     配置參考官方資料:http://nginx.org/en/docs/windows.html

2、安裝

     下載後解壓到安裝目錄下即可。

      啟動:cmd下執行:nginx

      其它命令:

            過載 :nginx -s reload  

           停止:nginx -s stop

           關閉 :nginx -s quit 

3、配置tomcat

      要均衡兩個tomcat,需要修改一些埠,一個預設,一個tomcat修改成其它埠(改為在預設埠值+1)。

      有三處埠修改:

       1)<Server port="8006" shutdown="SHUTDOWN">

        2) <Connector port="8081" protocol="HTTP/1.1"   connectionTimeout="20000"              redirectPort="8443" /> 

        3)<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" /> 

     還有一處是兩個tomcat都需要改的地方:在Engine上添加個jvmRoute屬性,要求兩個tomcat的值都不一樣

         <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2"

4、修改nginx配置

      開啟nginx的conf/nginx.conf

      修改位置為:

      1)不加權重的情況:

Xml程式碼  收藏程式碼
  1. http {  
  2.     include       mime.types;  
  3.     default_type  application/octet-stream;  
  4.     #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '  
  5.     #                  '$status $body_bytes_sent "$http_referer" '  
  6.     #                  '"$http_user_agent" "$http_x_forwarded_for"';  
  7.     #access_log  logs/access.log  main;  
  8.     sendfile        on;  
  9.     #tcp_nopush     on;  
  10.     #keepalive_timeout  0;  
  11.     keepalive_timeout  65;  
  12.     #gzip  on;  
  13.     #設定負載均衡的伺服器列表  
  14.     upstream spagobi {    
  15.       #根據ip計算將請求分配各那個後端tomcat,許多人誤認為可以解決session問題,其實並不能。    
  16.       #同一機器在多網情況下,路由切換,ip可能不同    
  17.       #ip_hash;     
  18.       server localhost:8080 ;    
  19.       server localhost:8081 ;    
  20.      }   
  21.     server {  
  22.         listen       80;  
  23.         server_name  spagobi;  
  24.         #charset koi8-r;  
  25.         #access_log  logs/host.access.log  main;  
  26.         location / {  
  27.             root   html; #專案的根目錄  
  28.             index  index.html index.htm;#定義首頁索引檔案的名稱  
  29.             proxy_pass http://spagobi; #請求轉向upstream spagobi定義的伺服器列表  
  30.             #以下是一些反向代理的配置可刪除.  
  31.             #proxy_redirect off;  
  32.             #後端的Web伺服器可以通過X-Forwarded-For獲取使用者真實IP  
  33.             #proxy_set_header Host $host;  
  34.             #proxy_set_header X-Real-IP $remote_addr;  
  35.             #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
  36.             client_max_body_size 10m;    #允許客戶端請求的最大單檔案位元組數  
  37.             client_body_buffer_size 128k;  #緩衝區代理緩衝使用者端請求的最大位元組數,  
  38.              proxy_connect_timeout   3;    
  39.              proxy_send_timeout      30;    
  40.              proxy_read_timeout      30;                 
  41.              proxy_buffer_size 4k;  #設定代理伺服器(nginx)儲存使用者頭資訊的緩衝區大小  
  42.              proxy_buffers 4 32k;   #proxy_buffers緩衝區,網頁平均在32k以下的話,這樣設定  
  43.              proxy_busy_buffers_size 64k; #高負荷下緩衝大小(proxy_buffers*2)  
  44.              proxy_temp_file_write_size 64k; #設定快取資料夾大小,大於這個值,將從upstream伺服器傳  
  45.         }  
  46.         #error_page  404              /404.html;  

    2、加權重的配置:

Xml程式碼  收藏程式碼
  1. #keepalive_timeout  0;  
  2.    keepalive_timeout  65;  
  3.    #gzip  on;  
  4.    #設定負載均衡的伺服器列表  
  5.    upstream www.xxx.com {    
  6.      #根據ip計算將請求分配各那個後端tomcat,許多人誤認為可以解決session問題,其實並不能。   
  7.      #同一機器在多網情況下,路由切換,ip可能不同    
  8.      #ip_hash;//如果ip_hash開啟,則根據ip的hash值計算到一個固定的server上,這樣每次請求都會固定這個server,也就變向解決了session共享的問題,保證該使用者的所有請求都會在一個tomcat上,而不會跑到其它tomcat上  
  9.      server localhost:8080 weight=8 max_fails=3 fail_timeout=30s;  
  10.      server localhost:8081 weight=2 max_fails=3 fail_timeout=30s;      
  11.     }   
  12.    server {  
  13.        listen       80;  
  14.        server_name  www.xxx.com;  
  15.        #charset koi8-r;  
  16.        #access_log  logs/host.access.log  main;  
  17.        location / {  
  18.            root   html;  
  19.            index  index.html index.htm;  
  20.            proxy_pass http://www.xxx.com;   
  21.             #以下是一些反向代理的配置可刪除.  
  22.             #proxy_redirect off;  
  23.             #後端的Web伺服器可以通過X-Forwarded-For獲取使用者真實IP  
  24.             #proxy_set_header Host $host;  
  25.             #proxy_set_header X-Real-IP $remote_addr;  
  26.             #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
  27.             client_max_body_size 10m;    #允許客戶端請求的最大單檔案位元組數  
  28.             client_body_buffer_size 128k;  #緩衝區代理緩衝使用者端請求的最大位元組數,  
  29.             proxy_connect_timeout   3;    
  30.             proxy_send_timeout      30;    
  31.             proxy_read_timeout      30;     
  32.            proxy_buffer_size 4k;  #設定代理伺服器(nginx)儲存使用者頭資訊的緩衝區大小  
  33.            proxy_buffers 4 32k;   #proxy_buffers緩衝區,網頁平均在32k以下的話,這樣設定  
  34.            proxy_busy_buffers_size 64k; #高負荷下緩衝大小(proxy_buffers*2)  
  35.            proxy_temp_file_write_size 64k; #設定快取資料夾大小,大於這個值,將從upstream伺服器傳  
  36.        }  
  37.        #error_page  404              /404.html;  

 nginx的upstream目前支援5中方式的分配:

   1)、輪詢;

Xml程式碼  收藏程式碼
  1. upstream backend{         
  2.       server localhost:8080 ;    
  3.       server localhost:8081 ;    
  4. }  

   2)、weight (權重);

Xml程式碼  收藏程式碼
  1. upstream backend{         
  2.       server localhost:8080 weight=8 max_fails=3 fail_timeout=30s;  
  3.       server localhost:8081 weight=2 max_fails=3 fail_timeout=30s;  
  4. }   

   3)、ip_hash(客戶端ip的hash來固定到固定的後端某一個伺服器上);

Java程式碼  收藏程式碼
  1. upstream backend{       
  2.       ip_hash;    
  3.       server localhost:8080;  
  4.       server localhost:8081;  
  5. }   

   4)、fair(根據後端伺服器響應時間);

Xml程式碼  收藏程式碼
  1. upstream backend{       
  2.       server localhost:8080;  
  3.       server localhost:8081;  
  4.       fair;  
  5. }   

   5)、url_hash (按訪問url的hash結果來分配請求,使每個url定位到同一臺後端伺服器)

Xml程式碼  收藏程式碼
  1. upstream backend{       
  2.       server localhost:8080;  
  3.       server localhost:8081;  
  4.       hash $request_uri;  
  5.       hash_method crc32;  
  6. }   

 5、測試

     從新啟動兩個tomcat,然後啟動nginx,瀏覽器輸入 http://localhost/,重新整理瀏覽器,看對映的tomcat的變化,不加權重的,採用奇偶切換,加權重的,按照權重出現的比例切換。

 參考

1、Nginx 簡單的負載均衡配置示例

      http://www.360doc.com/content/11/0722/02/1542811_135112833.shtml

2、Nginx詳細配置(含負載均衡)

    http://wenku.baidu.com/link?url=NP77-jpwGha-SZoQmm3ncqtKzRIdoGbu_Uxp7tp4fymOmEKVEJnO0jGUf_wDH-fqI3sZ0EuRbYZZ3WSNvC62uTUf8j53zjT_OAQrpCgUYTm