ngnix 初體驗:實現一個簡單的負載均衡實驗

Nginx是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,並在一個BSD-like 協議下發行。由俄羅斯的程序設計師Igor Sysoev所開發,供俄國大型的入口網站及搜索引擎Rambler(俄文:Рамблер)使用。其特色是佔有內存少,併發能力強,事實上nginx的併發能力確實在同類型的網頁服務器中表現較好,中國大陸使用nginx網站用戶有:百度、京東、新浪、網易、騰訊、淘寶等。html

關於代理能夠參考:圖解正向代理、反向代理、透明代理nginx

一、下載安裝正則表達式

下載最新穩定版:nginx-1.12.0.zipapache

解壓,雙擊 ngnix.exe 就行了。windows

而後打開 cmd,輸入瀏覽器

tasklist /fi "imagename eq nginx.exe"

出現:bash

打開瀏覽器,輸入「localhost」服務器

出現 ngnix 歡迎頁,說明 ngnix 已經成功安裝並啓動了:網絡

若是沒有成功,就要到 logs\error.log 下查看錯誤日誌了,我遇到端口號80被佔用的狀況,這時候要修改配置 conf\nginx.conf,端口號改成800併發

參考 nginx for Windows:http://nginx.org/en/docs/windows.html

二、配置負載均衡

ngnix支持三種方式:

  1. round-robin(輪詢方式):到應用服務器的請求以輪訓的方式分發;
  2. least-connected:下一個請求會分配到具備最少活躍鏈接的服務器;
  3. ip-hash:(基於客戶端的IP地址)以哈希的方式來決定請求應該分發到哪一個服務器;

咱們首先在本地打開兩個 Tomcat 服務器,一個端口爲 8080 ,一個端口爲 9000。

咱們這麼配置 conf\nginx.conf:

http {
    upstream myapp1 {  #集羣的名字,默認是輪詢的方式
        #ip_hash;  
        #least_conn;
        server 127.0.0.1:8080	weight=1;    #原始服務器的地址,權重weight默認爲1
        server 127.0.0.1:9000	weight=2;    #可是當weight都是1的時候,刷新頁面也並非均等出現的,其餘數值則正常
    }

    server {
        listen 800;       
        server_name  localhost;  #監聽的地址和端口,屆時在瀏覽器輸入localhost:800就能夠訪問原始集羣了

        location / {  #這是個正則表達式,具體的做用還不清楚
            proxy_pass http://myapp1;  #須要與以前設置的集羣的名字一致
        }
    }
}

這樣就完成了對 ngnix 的簡單配置。

配置後不能當即生效,若是你沒有打開 ngnix,那麼雙擊運行exe文件就好了,若是已經打開了,須要重啓以生效:(參考Beginner’s Guide

nginx -s reload

以後再瀏覽器輸入localhost:800/index.jsp就能夠查看原來部署在 Tomcat 上的原始的網頁了。nginx 會負責頁面的分配,刷新頁面可能會進入到不一樣的服務器上頁面,兩個頁面沒有什麼不一樣,地址欄的地址也不會有變化,正常狀況下客戶是不會察覺的。若是咱們是爲了作實驗,能夠對兩個服務器上的頁面稍做修改,這樣在進入到不一樣的服務器上的話就能夠直觀的發現了。

咱們知道 Session 對象保存在服務器上,採用輪詢或者 least-connected 的方式存在的問題是客戶端的下一次請求有可能被分配到其餘的服務器上,若是這樣就不能保持 Session 會話的正常通信,這種狀況下能夠使用 ip-hash 的方法,這個方法是基於客戶端的 IP 地址來進行服務器的分配的,只須要稍做修改:

upstream myapp1 {
    ip_hash;
    server srv1.example.com;
    server srv2.example.com;
    server srv3.example.com;
}

參考 Using nginx as HTTP load balancer:http://nginx.org/en/docs/http/load_balancing.html

nginx.conf 的配置項:參考Nginx+Tomcat搭建高性能負載均衡集羣

worker_processes  1;#工做進程的個數,通常與計算機的cpu核數一致  
  
events {  
    worker_connections  1024;#單個進程最大鏈接數(最大鏈接數=鏈接數*進程數)  
}  
  
http {  
    include       mime.types; #文件擴展名與文件類型映射表  
    default_type  application/octet-stream;#默認文件類型  
  
    sendfile        on;#開啓高效文件傳輸模式,sendfile指令指定nginx是否調用sendfile函數來輸出文件,對於普通應用設爲 on,若是用來進行下載等應用磁盤IO重負載應用,可設置爲off,以平衡磁盤與網絡I/O處理速度,下降系統的負載。注意:若是圖片顯示不正常把這個改爲off。  
      
    keepalive_timeout  65; #長鏈接超時時間,單位是秒  
  
    gzip  on;#啓用Gizp壓縮  
      
    #服務器的集羣  
    upstream  netitcast.com {  #服務器集羣名字   
        server    127.0.0.1:18080  weight=1;#服務器配置   weight是權重的意思,權重越大,分配的機率越大。  
        server    127.0.0.1:28080  weight=2;  
    }     
  
    #當前的Nginx的配置  
    server {  
        listen       80;#監聽80端口,能夠改爲其餘端口  
        server_name  localhost;##############   當前服務的域名  
  
    location / {  
            proxy_pass http://netitcast.com;  
            proxy_redirect default;  
        }  
          
  
        error_page   500 502 503 504  /50x.html;  
        location = /50x.html {  
            root   html;  
        }  
    }  
}
相關文章
相關標籤/搜索