Nginx+Tomcat叢集配置講解
阿新 • • 發佈:2018-11-19
目的:實現高效能負載均衡的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