Nginx的負載均衡配置
名詞解釋,網路搜尋結果
正向代理(Forward Proxy):
客戶端【使用者A】和原始伺服器(origin server)【伺服器B】之間的伺服器【代理伺服器Z】,為了從原始伺服器取得內容,使用者A向代理伺服器Z傳送一個請求並指定目標(伺服器B),然後代理伺服器Z向伺服器B轉交請求並將獲得的內容返回給客戶端。客戶端必須要進行一些特別的設定才能使用正向代理。
反向代理(Reverse Proxy):
反向代理正好與正向代理相反,對於客戶端而言代理伺服器就像是原始伺服器,並且客戶端不需要進行任何特別的設定。客戶端向反向代理的名稱空間(name-space)中的內容傳送普通請求,接著反向代理將判斷向何處(原始伺服器)轉交請求,並將獲得的內容返回給客戶端。
使用者A始終認為它訪問的是原始伺服器B而不是代理伺服器Z,但實用際上反向代理伺服器接受使用者A的應答,從原始資源伺服器B中取得使用者A的需求資源,然後傳送給使用者A。
upstream節點的分配方式及配置說明
upstreamresinserver{#定義負載均衡裝置的Ip及裝置狀態 ip_hash; server127.0.0.1:8000down; server127.0.0.1:8080weight=10max_fails=3fail_timeout=10s; server127.0.0.1:6801; server127.0.0.1:6802backup; } 裝置的狀態: 1.down表示單前的server暫時不參與負載 2.weight權重,預設為1。權值越高被分配到的機率越大 3.max_fails許請求失敗的次數預設為1.當超過最大次數時,返回proxy_next_upstream模組定義的錯誤 4.fail_timeoutmax_fails次失敗後,暫停的時間。 5.backup其它所有的非backup機器down或者忙的時候,請求backup機器。所以這臺機器壓力會最輕。 nginx支援同時設定多組的負載均衡,用來給不用的server來使用。 client_body_in_file_only設定為On可以講clientpost過來的資料記錄到檔案中用來做debug client_body_temp_path設定記錄檔案的目錄可以設定最多3層目錄 location對URL進行匹配.可以進行重定向或者進行新的代理負載均衡
下面開始簡要的負載均衡配置:
負載均衡:多臺伺服器平均分擔負載,不會因某臺伺服器的負載宕機而某臺伺服器閒置的情況,也會不會因某臺宕機而影響業務。
實驗所需環境
準備三臺已安裝了nginx服務的伺服器: A伺服器ip:10.10.10.10(Master) B伺服器ip:10.10.10.11 C伺服器ip:10.10.10.12 測試域名:test.com 部署思路:A伺服器作為主伺服器,域名直接解析到A伺服器上,由A伺服器負載均衡到B和C伺服器上 域名解析:在要訪問的Windows的hosts檔案中加入:10.10.10.10test.com 首先確保三臺服務都安裝的相同版本或者版本差別不大的nginx服務並且啟動,預設的nginx.conf檔案
A主伺服器的nginx.conf在http節點中加入如下程式碼
http{ ...... ...... upstreamMyServer{#定義負載裝置ip及其裝置狀態 server10.10.10.11:80;#做負載均衡的伺服器地址B server10.10.10.12:80;#做負載均衡的伺服器地址C } server{ listen80; location/{ proxy_passhttp://MyServer;#指向上面設定反向代理轉發的伺服器 proxy_set_headerHost$host; proxy_set_headerX-Real-IP$remote_addr; proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for; } ...... ...... } /usr/local/nginx/sbin/nginx-sreload#儲存後重啟nginx
B、C伺服器nginx.conf在http節點中加入如下程式碼
http{ ...... ...... server{ listen80;#和A伺服器中upstream中對應設定的server埠要相同 server_nametest.com;#域名 location/{ roothtml; indexindex.htmlindex.htm; } ...... ...... } /usr/local/nginx/sbin/nginx-sreload#儲存後重啟nginx
至此,簡要的nginx負載已配置完畢,在添加了hosts的Windows主機上開啟瀏覽器,輸入http://test.com,就可以看到預設的index.html頁面,重新整理會在B/C伺服器上負載輪詢。
為了可以直觀的檢視2臺負載,可以在修改B、C伺服器的index.html預設檔案,以此區別重新整理頁面的顯示。同時也可以通過B、C伺服器nginx的log日誌檢視訪問記錄
B伺服器
可以測試,分別把B、C的nginx服務stop,重新整理頁面是否正常,達到負載需求。
此時會發現A伺服器只做了Master,負載分發,是否也可以提供服務呢。做如下設定後,就可以讓ABC三臺伺服器做負載均衡
在A服務的nginx.conf 做如下設定,將A服務加入到upstream節點中,其它B、C伺服器配置不變化
http{ ..... ..... upstreamMyServer{ server10.10.10.11:80;#做負載均衡的伺服器地址B server10.10.10.12:80;#做負載均衡的伺服器地址C server10.10.10.12:8081;#做負載均衡的伺服器地址A(新增A服務的地址) } server{ listen80; location/{ proxy_passhttp://MyServer;#指向上面設定反向代理轉發的伺服器 proxy_set_headerHost$host; proxy_set_headerX-Real-IP$remote_addr; proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for; } } server{ listen8081;#埠 server_nametest.com;#域名 location/{ roothtml; indexindex.htmlindex.htm; } } .... .... } /usr/local/nginx/sbin/nginx-sreload#重啟nginx
再重新整理頁面,此時就可以發現三臺主機頁面都已分別顯示
A伺服器
B伺服器
C伺服器
轉載於:https://blog.51cto.com/liumissyou/1745239