一、Nginx反向代理
在介紹nginx的負載平衡之前,我們先來介紹nginx的反向代理,因為反向代理用的比較多,所以,這裡我們就不介紹正向代理了。
nginx的代理程式,就是將請求傳送給nginx,然後將請求轉送給後端伺服器,後端伺服器處理完畢之後將結果再發給nginx,nginx再把結果傳送給客戶端。後端伺服器可在遠端也可在本機,也可以是nginx伺服器內部定義的其他虛擬主機。這些接收nginx轉送的伺服器被稱為上游(upstream)
使用nginx做代理的目的之一是擴展基礎架構的規模。 nginx可以處理大量並發連接,請求到來後,nginx可將其轉發給任意數量的後台伺服器進行處理,這等於將負載平衡分散到整個叢集。
語法:proxy_pass URL
解釋:URL的形式可以如下:http://location:8000/uri/等,可在location中進行設定。
範例:我們來寫一個簡單的反向代理:
#在我80埠監聽的目錄下沒有test_proxy的文件,但在我8080埠監聽目錄下有,我在80埠的server裡面加入如下內容:
location ~ /test_proxy.html$ {proxy_pass http://127.0.0.1:8080;
}###################然後在瀏覽器上輸入http://IP位址/test_proxy.html,會出現請求的訊息,實際上是80埠轉送給了8080埠並把資料請求了回來。 #####################二、緩衝##########nginx也提供了緩衝的機制,用於提高效能。沒有緩衝的情況下,資料直接從後端伺服器傳送給客戶端。緩衝的作用是在nginx上暫時儲存來自後端伺服器的處理結果,從而可以提早關閉nginx到後端的連接,減少IO的損耗。一般內容存放在記憶體當中,但當內容過多,造成的記憶體不夠時,會把內容存放在暫存文件目錄下。以下是一些常用的緩衝的配置項,可以再http、server和location內容區塊下。
proxy_buffering:控製本內容區塊下是否啟用緩衝,預設為"on"。
proxy_buffers:有兩個參數,第一個控制緩衝區請求數量,第二個控制緩衝區大小。預設值為8個、一頁(一般是4k或8k)。這個值越大,緩衝的內容就越多。
proxy_buffer_size:後端回覆結果的首段(包含header的部分)是單獨緩衝的,此配置就是配置這部分緩衝區的大小。這個值預設與proxy_buffer的值相同,我們可以把它設定得小一些,因為header內容一般比較少。
proxy_busy_buffers_size:設定被標記為"client-ready"(客戶端就緒)的緩衝區大小。客戶端一次只能從一個緩衝讀取數據,而緩衝是按照佇列次序被分批傳送給客戶端的。此語法配置的就是這個佇列的大小。
proxy_temp_path:定義nginx儲存暫存檔案路徑。
proxy_max_temp_file_size:每個要求可以儲存暫存檔案的目錄大小。如果上游發出的結果太大以至於無法放入一個緩衝,則nginx會為其建立暫存檔案。
三、負載平衡
#設定語法:upstream name {.......}
解釋:name是自訂的名字,而{}則是需要定義的內容,只能在http區塊定義,不能在server區塊裡定義。定義完之後可在location區塊下寫入如下程式碼進行呼叫:http://name。
範例:由於伺服器數量的限制,這裡我們是用一台伺服器的不同的連接埠來模擬負載平衡,當然,多台的配置也是差不多的。
在server區塊內加入如下程式碼:
upstream test {#ip_hash server IP:8001; server IP:8002; server IP:8003; }
然後,我們在http區塊內的location中加入以下內容:
location / {#設定主機頭和客戶端真實位址,以便伺服器取得客戶端真實IPproxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_connect_timeout 30;## proxy_connect_timeout 30;## proxy_connect_timeout 30;## proxy_connect_timeout 30;#設定連線逾時時間為#30s#"#. 60; proxy_read_timeout 60; proxy_buffer_size 32k; #設定緩衝區大小 proxy_buffering on; #開啟緩衝區
###################################### # proxy_buffers 4 128k; #設定緩衝區的數目與大小###### proxy_busy_buffers_size 256k; #設定客戶端就緒緩衝區大小###### proxy_max_temp_file_size 256k;###### proxy_max_temp_file_size 256k;###### proxy_pass http://test; #呼叫上面設定的負載平衡 ######}###################當然,得提醒一下,我們設定的IP的連接埠是事先在設定檔裡配置好的。例如如下的配置。 #####################然後,我們存取我們的主機位址,然後不斷的刷新,會發現出來每個連接埠出來的頁面資訊。預設的負載平衡採用的是輪詢的方式。 ##################如果是用的不同的伺服器進行負載平衡的話,只需稍稍改改,就例如如下配置:######### #####################
upstream mydomain.com{server 47.95.242.167:80; server 47.95.242.168:80; server 47.95.242.169:80; server 47.95.242.169:800; }
設定完之後呢,剩下的在http裡的程式碼和上面的相似,然後在其他的三個伺服器那裡進行如下配置。當然,我們還得在那三個伺服器那裡的防火牆進行設定。
#server{listen 80; server_name www.mydomain.com; #index index.htm index.php index.html; root 目錄路徑;##}
#'
①後端伺服器在負載平衡調度中的狀態dowm:當前的server暫時不參與負載平衡。
backup:預留的備份伺服器。
######max_fails:###允許請求失敗的次數。 #####################fail_timeout:###經過max_fails失敗後,伺服器暫停的時間。 #####################max_conns:###限制最大的接收連線數。 ##################註:以上的設定都是在upstream的時候設定的,例如在{}裡面加入的server IP:8001 dowm,就表示這個服務是不參與負載平衡的,用來做備份的,以上配置都是寫在服務的後面。 #####################②調度演算法################輪詢:按時間順序逐一分配到不同的後端伺服器。
加權輪詢:可在設定的server後面加個weight=number,number值越高,分配的機率越大。
ip_hash:每個請求按存取IP的hash分配,這樣來自同一IP固定存取一個後台伺服器。
least_hash:最少連結數,哪個機器連線數少就發給哪個機器。
url_hash:按存取的url的hash結果分配請求,是每個url定向到同一後端伺服器上。
hash關鍵值:hash自訂的key。
註:調度演算法在設定upstream中配置,例如在此大括號裡面寫入ip_hash表示使用ip_hash的方式分配
更多Nginx相關技術文章,請造訪Nginx教學#欄位學習!
以上是nginx怎麼負載平衡的詳細內容。更多資訊請關注PHP中文網其他相關文章!