1. 程式人生 > >Nginx+Tomcat叢集配置講解

Nginx+Tomcat叢集配置講解

目的:實現高效能負載均衡的Tomcat叢集


在linux上安裝好niginx後進入conf資料夾下編輯nginx.conf檔案,檔案配置講解如下


<!--nginx程序數,建議設定為等於CPU總核心數-->
worker_processes  8;
<!--錯誤日誌存放路徑 -->
error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
<!--指定pid存放檔案-->
pid        logs/nginx.pid;


events {
	<!--單個程序最大連線數,那麼該伺服器的最大連線數=連線數*程序數-->
    worker_connections  1024;
}




<!-----------------------------------------設定http伺服器,利用它的反向代理功能提供負載均衡支援------------------------------>
http {
	 <!--設定mime型別-->
    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指令指定nginx是否呼叫sendfile函式來輸出檔案,對於普通應用設為 on,如果用來進行下載等應用磁碟IO重負載應用,可設定為off,以平衡磁碟與網路I/O處理速度,降低系統的負載。注意:如果圖片顯示不正常把這個改成off。-->   
    sendfile        on;  

	<!--長連線超時時間,單位是秒-->  
    keepalive_timeout  65;
	
	<!--啟用Gizp壓縮 訪問網站的時候nginx檢查有木有壓縮檔案,提高網站效能-->  
    gzip  on;
	
	
	
	
	<!--#################################################以下為核心配置####################################--> 
	<!--#################################################伺服器的叢集配置#################################-->  
	<!--website為叢集的伺服器列表的名字, website和proxy_pass保持一樣 ,最終請求會被轉發到這裡來-->  
    upstream website 
    {	
		#ip_hash;<!--可選,根據來源IP方式選擇web伺服器,省略的話按預設的輪循方式選擇web伺服器,解決Session每次訪問頁面都不一樣,讓使用者的請求只在一個服務上使用,在同一個server中保持一個穩定的session-->
		
        server 192.168.27:8080  weight=1
		server 192.168.28:8080  weight=2
	<!--server:配置tomcat伺服器請求的地址,2臺Tomcat服務就配置2個server,可以用weight引數設定權重,即訪問的機率,server後的ip即使tomcat的ip,weight表示權重,weight越大,對應伺服器被訪問的概率越大,若是相等,幾個伺服器輪流被訪問;假如我們啟動tomcat1(27伺服器),tomcat2(28伺服器),nginx(27伺服器),在瀏覽器中輸入192.168.27(niginx所在的伺服器),然後重新整理,這時我們會看到tomcat1和tomcat2的頁面交替顯示,這就表示nginx已經負載了兩個tomcat,可以將請求轉發到不同的tomcat。-->
	
	<!--nginx 的upstream目前支援的幾種方式的分配1.輪詢(預設):每個請求按時間順序逐一分配到不同的後端伺服器,如果後端伺服器down掉,能自動剔除。2.weight:指定輪詢機率,weight和訪問比率成正比,用於後端伺服器效能不均的情況。 3.ip_hash:每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端伺服器,可以解決session的問題,ip_hash其實上不能夠完全解決ip問題,因為有很多使用者的ip隨時都可能在變動,ip_hash這個名字你就知道,是通過hash雜湊的原理將使用者的ip雜湊到指定的tomcat上,自然而然的想當然的解決了session問題,最好是用memcached存取來實現session共享-->
		
    }


	
	
	
	
	<!--#################################################當前的nginx的配置#############################--> 
	
	server {
        listen       80; <!--監聽埠,一般都為http埠:80;-->
		
		<!--當前服務的域名,域名可以有多個,用空格隔開:例如 server_name www.sohu.com baidu.com;-->
        server_name  localhost www.cgfytop.com; 
		
		location / {
		
		<!--設定一個代理,請求轉向自定義的伺服器列表,這裡我們將請求都轉向標識為http://website;的負載均衡伺服器列表;如果我們訪問localhost:8,或者www.cgfytop.com:80,則交給名稱為website的nginx叢集來處理-->
		proxy_pass http://website;
		
		<!--proxy_set_header設定客戶端ip和埠等資訊-->
       	proxy_set_header     Host               $http_host;  
        proxy_set_header     X-Real-IP          $remote_addr;
        proxy_set_header     X-Forwarded-For    $proxy_add_x_forwarded_for;
		
<!--下面的配置可以解決2個Tomcat伺服器叢集,當一臺伺服器掛掉(宕機)後,請求變得很慢的問題,(Tomcat叢集一臺伺服器掛掉後請求變慢解決方案)-->
        proxy_connect_timeout       1;  
        proxy_read_timeout          1;  
        proxy_send_timeout          1;   
       }
	   
	   
	   
	   
	   error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
	   
	   
	   
	   
	   
		<!--此為預設配置,需修改成以上的配置-->
		<!--location/{}:對什麼樣的字尾進行負載均衡請求,假如我們要對所有的aspx字尾的檔案進行負載均衡時,可寫成:location ~ .*\.aspx$ {}-->

	    <!--location / {root   html;index  index.html index.htm;}-->
	

	}
	
	<!----------------------------------------設定http伺服器結束--------------------------------------------->
		
		
	<!--include /usr/local/nginx/conf/conf.d/*.conf; include可以模組化配置檔案-->


}

這段指令碼放在server{}裡可判斷使用者請求的具體裝置,是手機端還算是電腦端

    set $mobile_rewrite 0;

if ($http_user_agent ~* "(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od|ad)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|arm|KFAPWI") {
  set $mobile_rewrite 1;
}

if ($http_user_agent ~* "^(1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-)") {
  set $mobile_rewrite 1;
}
 

proxy的詳細配置

 proxy_redirect          off;
    proxy_set_header        Host $host;
    proxy_set_header        X-Real-IP $remote_addr; #獲取真實IP
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for; #獲取代理者的真實ip
    proxy_connect_timeout   30s;
    proxy_send_timeout      60s;
    proxy_read_timeout      150s;
    proxy_buffer_size       16k;
    proxy_buffers           8 64k;
    proxy_busy_buffers_size 128k;
    proxy_temp_file_write_size 128k;
    proxy_ignore_client_abort on;
    #proxy_http_version 1.1;
    #proxy_set_header Connection "";
    #proxy_next_upstream off;
    proxy_next_upstream error invalid_header http_500 http_502 http_503 http_504;

gzip詳細配置

gzip  on;
    gzip_http_version 1.1;
    gzip_min_length  1k;
    gzip_buffers     4 16k;
    gzip_comp_level  2;
    gzip_types       text/plain application/x-javascript text/css text/xml application/xml text/javascript application/json;
    gzip_disable "MSIE [1-6]\.";
    gzip_vary  on;
 

設定請求緩衝

      #設定請求緩衝    
      server_names_hash_bucket_size 128;
      client_header_buffer_size 32k;
      large_client_header_buffers 4 32k;
      client_max_body_size 8m;




參考的典例文件

新增Nginx對於靜態檔案的快取配置
nginx的安裝配置
nginx的win系統下的部署
淺談web應用的負載均衡、叢集、高可用(HA)解決方案
nginx+tomcat+memcached負載均衡叢集搭建1
nginx+tomcat+memcached負載均衡叢集搭建2
tomcat與nginx的配置1
tomcat與nginx的配置2