前言
正如大家所知nginx可以作為web伺服器,提供web服務,也可使用其子產品進行前端排程,實作負載均衡的功能,在此我們來叙說其前端排程功能。
一、常用子產品說明
ngx_http_proxy_module(負載均衡,反代子產品)
1.proxy_pass URL; #反代及其輸出其路徑
示例:location / {
proxy_pass http://192.168.184.129:80;
}
location /bbs/ {
proxy_pass http://192.168.184.129:80;
}
proxy_pass http://192.168.184.129:80/;
location ~|~* PATTERN {
注意:proxy_pass後面的路徑不帶uri時,其會将location的uri傳遞給後端主機,在uri後加上斜杠時,則将是/下的檔案請求為其站點目錄。如果location定義其uri時使用正規表達式的模式,則proxy_pass之後必須不能使用uri,否則為文法錯誤。
2. proxy_set_header fileld value; #設定發往後端主機請求封包的首部資訊
示例:proxy_set header X-REAL-IP $remote_addr;
3.proxy_cache_path #定義代理緩存路徑
proxy_cache zone #調用的緩存名稱;
proxy_cache_key string; #調用的緩存鍵值;
proxy_cache_vaild time; #各種響應碼的緩存時長;
示例:
proxy_cache proxycache;
proxy_cache_key $request_uri
proxy_cache_vaild 200 302 10m;
proxy_cache_valid 301 1h;
proxy_cache_valid any 1m;
ngx_http_upstream_module:(upstream子產品)
upstream子產品用來定義一個server組的反代子產品,主要是由proxy_pass,fastcgi_pass,uwsgi_pass....組成。
1.upstream name {...} #定義一個服務端組,隻能在http上下文中定義
upstream webserver
2.server address #後端主機IP位址
參數:
①weight=number #權重,預設為1,
②max_fails=number #失敗的嘗試最大次數
③fail_timeout=time #伺服器不可以逾時時間
④backup #把伺服器當做備用狀态,可使用為sorry server
⑤down #标記為不可用狀态
upstream dynamic {
zone upstream_dynamic 64k;
server backend1.example.com weight=5;
server backend2.example.com:8080 fail_timeout=5s slow_start=30s;
server 192.0.2.1 max_fails=3;
server backend3.example.com resolve;
server backend4.example.com service=http resolve;
server backup1.example.com:8080 backup;
server backup2.example.com:8080 backup;
3.least_conn; #最少連接配接算法,當server權重不相同是為wlc即權重最少連接配接
4.ip_hash; #源位址哈希,能将來自于相同ip位址的主機發往同一個後端real server。
5.hash key [consistent]; #基于指定的key的hash表實作請求排程。
hash $request_uri;
hash $remote_addr;
hash $cookie_name;
6.keepalive_connectons: #可使用的保持連接配接的連接配接數
7.health_check [parameters];
定義對後端主機的健康狀态進行檢測機制,隻能用于location上下文;
可用參數:
①interval=time #檢測頻率,預設為5秒
②fails=number #判斷伺服器狀态轉為失敗需要檢測的次數
③passes=number #判斷伺服器狀态轉為成功需要檢測的次數
④uri=uri #判斷其健康與否是使用的uri
⑤match #基于指定的match來衡量檢測結構的成敗
ngx_stream_core_module:
1.listen address:port [ssl] [udp] [backlog=number] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
監聽的端口;
預設為tcp協定;
udp: 監聽udp協定的端口;
執行個體:
steam {
upstream webserver {
server 192.168.184.130:22;
server 192.168.184.132:22;
hash $request_uri;
server {
listen 10.1.100.1:2203;
proxy_pass webserver;
實驗環境極其步驟:
1、實驗環境:一台前端排程器,兩台後端真實主機,其ip位址分别為:
排程器:10.1.10.1
real_server1:192.168.184.130
real_server2:192.168.184.132
2、在排程器上配置反代proxy_pass,如下拓撲圖:
<a href="http://s4.51cto.com/wyfs02/M01/89/72/wKioL1gTZzjTfNQdAACEpH56CXw894.png" target="_blank"></a>
<b>實驗截圖:</b>
<b>實驗結果:</b>
<b>注意設定記憶體緩存時需要在http子產品寫入代理緩存路徑:proxy_cache_path如: proxy_cache_path /var/cache/nginx/proxy levels=2:1:2 keys_zone=proxycache:10m max_size=1g;同時proxy_pass也同樣支援正規表達式模式比對。</b>
upstream子產品:
<a href="http://s3.51cto.com/wyfs02/M02/89/74/wKioL1gUFNLBaJkNAAA3-iVIyWo934.png" target="_blank"></a>
<b>注意:此子產品定義時需在location中調用才能生效:proxy_pass http://webserver;</b>
<b>實驗結果圖:</b>
<a href="http://s5.51cto.com/wyfs02/M00/89/74/wKioL1gUFfjRKHz2AAAuSf8aX1Y748.png" target="_blank"></a>
stream_module:
<a href="http://s3.51cto.com/wyfs02/M02/89/77/wKiom1gUFrLSClwcAAAt1243xpY765.png" target="_blank"></a>
上訴則為nginx的反代子產品,如需清晰的掌握需結合實際的應用程式加以測試,如搭建WordPress等應用程式測試是否能實作前端排程功能。
本文轉自chengong1013 51CTO部落格,原文連結:http://blog.51cto.com/purify/1867063,如需轉載請自行聯系原作者