1. 程式人生 > >nginx實現反向代理負載均衡

nginx實現反向代理負載均衡

反向代理負載均衡

Nginx實現反向代理

nginx代理基於是ngx_http_proxy_module模塊的功能,該模塊有很多屬性配置選項,如:

proxy_pass:指定將請求代理至server的URL路徑;

proxy_set_header:將發送至 server的報文的某首部進行重寫

proxy_send_timeout:在連接斷開之前兩次發送到server的最大間隔時長;過了這麽長時間後端還是沒有收到數據,連接會被關閉

proxy_read_timeout:是從後端讀取數據的超時時間,兩次讀取操作的時間間隔如果大於這個值,和後端的連接會被關閉。

proxy_connect_timeout:

是和後端建立連接的超時時間

proxy_pass配置常見用法有三種:

1、location的/uri將被替換為/newuri,如下:

location /uri {

proxy_pass http://ip:port/newuri;

}

應用場合:頁面很固定的時候(如淘寶雙十一的主界面)

將/mobi 的請求跳轉到新服務器上/mobile目錄下

location /mobi/ {

proxy_pass http://172.16.100. 1/mobile/index.php;

}

應用場合:用於流量的分流,將特定的請求分流道特定的服務器上

2、如果location的URI是通過模式匹配定義的,其URI將直接被傳遞,而不能為其指定轉換的另一個URI。

location ~ ^/mobile {

proxy_pass http://172.16.100.2;

}

3、如果在location中使用的URL重定向,那麽nginx將使用重定向後的URI處理請求,而不再考慮之前定義的URI

location /youxi {

rewrite ^(.*)$ /index.html break;

proxy_pass http://172.16.100.1;

}

proxy_set_header

proxy_set_header可將發送至server的報文的某首部進行重寫;常用於nginx做負載均衡時,獲取客戶端IP時,需要添加forward頭部。

proxy_set_header Host $host;

proxy_set_header X-REMOTE-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

原有請求報文中如果存在X-Forwared-For首部,則將client_addr以逗號

分隔補原有值後,否則則直接添加此首部;

$proxy_add_x_forwarded_for; (從後端的服務器上能看到RS的真實IP)

日誌查看:

"$remote_addr" $host "$http_x_forwarded_for"

nginx負載均衡是ngx_http_upstream_module模塊的功能,需要在配置文件http塊上下文中定義upstream塊,指定一組負載均衡的後端服務器,然後在proxy_pass中引用,就可以反向代理時實現負載均衡了。

語法:server address [parameters];

paramerters:

weight:負載均衡策略權重,默認為1;

max_fails:在一定時間內(這個時間在fail_timeout參數中設置)檢查這個服務器是否可用時產生的最多失敗請求數

fail_timeout:在經歷了max_fails次失敗後,暫停服務的時間。max_fails可以和fail_timeout一起使用,進行對後端服務器的健康狀態檢查;

backup:當所有後端服務器都宕機時,可以指定代理服務器自身作為備份,對外提供維護提示頁面;

down:永久不可用。

upstream塊裏可以用多個server選項配置多個後端服務器,同時還可配置對後端服務器的健康狀態檢查,可以在server後面加上max_file(proxy_next_upstream指定檢查策略,默認為返回超時為失敗)和fail_timeout參數實現;也可以用health_check選項來實現健康檢測可以指定的參數較多,不過需要定義在location上下文中。

另外,可以指定代理服務器自身作為備份server,當所有後端服務器都宕機時,對外提供維護提示頁面。還可以指定負載均衡策略:主要有round_robin(加權輪詢,默認)、

hash、ip_hash、least_conn(最少連接)和least_time(最少響應時間,商業版本),策略定義在upstream上下文即可;

配置文件實例:

在http塊定義upstream:
   upstream server-cluster {
         server 172.17.253.107:80 weight=4;
         server 172.17.253.157:80 weight=4;
         server 172.17.233.166:80;
        check interval=3000 rise=2 fall=5 timeout=1000 type=http;
        check_http_expect_alive http_2XX http_3XX;
        }
        upstream static-cluster {
         server 172.17.250.209:80;
         server 172.17.254.148:80;
        check interval=3000 rise=2 fall=5 timeout=1000 type=http;
        check_http_expect_alive http_2XX http_3XX;
        }
 在server段引用
 location  ~* .jpg|.png|.gif|.jpeg$ {
                proxy_pass http://static-cluster;
        }

 location  ~* .js|.css|.html|.xml$ {
                proxy_pass http://static-cluster;
        }

對real-server進行健康檢測

在http段中
upstream basic_server {
                server 192.168.17.175:80 weight=2;
                server 192.168.17.176:80 weight=5;
                check interval=3000 rise=2 fall=5 timeout=2000 type=http;
                check_http_expect_alive http_2xx http_3xx;
        }
在server段中
server {
        location /status {
        check_status;
        }
}



本文出自 “13126984” 博客,請務必保留此出處http://13136984.blog.51cto.com/13126984/1981416

nginx實現反向代理負載均衡