比如有30個請求,2臺服務(wù)器A(10.0.0.1)和B(10.0.0.2),如果希望A處理10個請求,B處理20個請求,可以這樣定義:
upstream pools{ server 10.0.0.1 weight=1; server 10.0.0.2 weight=2; }
ip_hash(靜態(tài)調(diào)度算法)
每個請求按客戶端IP的hash結(jié)果分配,當(dāng)新的請求到達,先將客戶端IP通過哈希算法哈希出一個值,在隨后的分配客戶端請求中,客戶IP的哈希值只要相同,就會被分配到同一臺服務(wù)器。
upstream blog_pool{ ip_hash; server 192.168.30.5:80; server 192.168.30.6:8090; }
注意:當(dāng)使用ip_hash時,不能有weight和backup。
least_conn算法
least_conn算法會根據(jù)后端服務(wù)器的連接數(shù)來覺得分配情況,哪臺服務(wù)器連接數(shù)最少就分發(fā)多的請求。
調(diào)度算法除了上面所列的(常用)還有很多,就不一一列舉了。
http_proxy_module模塊
http_proxy_module可以將請求轉(zhuǎn)發(fā)到另外一臺服務(wù)器,在反向代理中,會通過location功能匹配指定的URI,然后把收到符合匹配的URI的請求通過proxy_pass拋給定義好的upstream節(jié)點池。
http_proxy模塊參數(shù)
參數(shù) | 說明 |
---|---|
proxy_set_header | 設(shè)置http請求header項傳給后端服務(wù)器節(jié)點,例如:可實現(xiàn)讓代理后端的服務(wù)器節(jié)點獲取訪問客戶端用戶的真實IP地址 |
client_body_buffer_size | 用于指定客戶端請求主體緩沖區(qū)大小 |
proxy_connect_timeout | 表示反向代理后端節(jié)點服務(wù)器連接的超時時間,即發(fā)起握手等候響應(yīng)的超時時間 |
proxy_send_timeout | 表示代理后端服務(wù)器的數(shù)據(jù)回傳時間,即在規(guī)定時間內(nèi)后端服務(wù)器必須傳完所有數(shù)據(jù),否則nginx將斷開這個連接 |
proxy_read_timeout | 設(shè)置nginx從代理的后端服務(wù)器獲取信息的時間,表示連接建立成功后,nginx等待后端服務(wù)器的響應(yīng)時間,其實是nginx已經(jīng)進入后端的排隊之中等候處理的時間 |
proxy_buffer_size | 設(shè)置緩沖區(qū)大小,默認該緩沖區(qū)大小等于指令proxy_buffers設(shè)置的大小 |
proxy_buffers | 設(shè)置緩沖區(qū)的數(shù)量和大小,nginx從代理的后端服務(wù)器獲取的響應(yīng)信息,會設(shè)置到緩沖區(qū) |
proxy_busy_buffers_size | 用于設(shè)置相同很忙時可以使用的proxy_buffers大小,官方推薦的大小為 proxy_buffers * 2 |
proxy_trmp_file_write_size | 指定proxy緩存臨時文件的大小 |
proxy_pass使用
格式:proxy_pass URL;
示例如下:
proxy_pass http://blog.syushin.com/;
proxy_pass http://192.168.30.7:8080/uri;
proxy_pass http://tmp/www.sock;
URL可以是域名,IP地址也可以是socket文件。
對于proxy_pass的配置有幾點需要注意:
示例1
location /upload/ {
proxy_pass http://192.168.30.7;
}
示例2
location /upload/ {
proxy_pass http://192.168.30.7/; # 注意多了一個斜桿
}
示例3
location /upload/ {
proxy_pass http://192.168.30.7/blog/;
}
示例4
location /upload/ {
proxy_pass http://192.168.30.7/blog;
}
假如server_name為blog.syushin.com,當(dāng)請求http://blog.syushin.com/uploa…,上面示例1-4的請求結(jié)果是:
示例1:http://192.168.30.7/upload/index.html
示例2:http://192.168.30.7/index.html
示例3:http://192.168.30.7/blog/index.html
示例4:http://192.168.30.7/blogindex.html