Nginx的反向代理 和 负载均衡
生活随笔
收集整理的這篇文章主要介紹了
Nginx的反向代理 和 负载均衡
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
反向代理: web reverse proxy?
proxy_pass URL 設置后端服務器的協議和地址.
請求的URI按照下面的規則傳送給后端的服務器:
1 如果proxy_pass使用了uri,當傳送請求到后端服務器時候,規范化之后的請求路徑與配置中的路徑的匹配部分將被替換為指令定義的URI.
location /name/ {
proxy_pass http://192.168.0.1/emna/;
}
http://www.magedu.com/name/index.html =>?
http://www.magedu.com/emna/index.html
? location /name/ {
proxy_pass http://192.168.0.1/; 注意后面的/
}
http://www.magedu.com/name/index.html =>?
http://192.168.0.1/index.html
2 如果proxy_pass沒有使用URI,傳送到后端服務器的請求的URI就是客戶端發起的請求的URI,如果nginx內部改變了請求URI,那么傳送到URI是nginx改變之后的完整的URI.
location /name/ {
proxy_pass http://192.168.0.1;
}
http://www.magedu.com/name/index.html =>?
http://192.168.0.1/name/index.html
注意: 在一下的情況中,proxy_pass指令是不能添加自己的URI.
1 location 匹配路徑的時候使用了正則表達式.
location ~ ^/name {
proxy_pass http://192.168.0.1;
}?
2 在代理的過程中使用了rewrite指令.
location /name {
rewrite ^/name/(.*) /age/$1?
proxy_pass http://192.168.0.1;
}
---------------------------------------
proxy_set_header name value; 允許重新定義或者添加發往后端服務器的請求頭信息.
默認情況下有2個參數的值會改變:
proxy_set_header Host $proxy_host;
proxy_set_header Connection close;
注意:如果我們定義的值為空,那么是不會傳遞給后端的服務器的.
proxy_set_header Host '';
----------------------------------------
proxy_redirect default;
proxy_redirect off;
proxy_redirect redirect replacement;
對后端服務器響應中的Location: 和 Refresh:響應頭替換文本.
proxy_redirect off; 表示不做處理
proxy_redirect http://localhost/two/ http://localhost/one/;
如果Location: http://localhost/two/some/uri將被改變為:
? ? Location: http://localhost/one/some/uri
proxy_redirect default;使用location 和 proxy_pass執行的參數做匹配:
location /one/ {
proxy_pass http://localhost/two/;
proxy_redirect default;
}
location /one/ {
proxy_pass http://localhost/two/;
proxy_redirectr http://localhost/two/ http://localhost/one/;
}
以上2個是等價的自己理解.
-----------------------------------------------------
proxy_send_timeout time;
定義向后端服務器傳輸請求的超時時間,該時間表示相鄰兩次寫操作之間的最長的時間間隔,而不是整個請求的時間,如果后端服務器在超時時間段內沒有接受到任何數據,那么連接斷開.
-----------------------------------------------------
proxy_read_timeout time;
定義從后端服務器讀取響應的超時,該時間是指相鄰兩次讀操作之間的最大的時間間隔,而不是整個響應傳輸完成的時間,如果后端服務器在超時時間段內沒有傳輸任何的數據,那么連接關閉.
-----------------------------------------------------
proxy_connect_timeout time;
設置與后端服務器建立連接的超時時間,應該注意這個時間一般不會超過75s
------------------------------------------------------
proxy_buffering on | off; 代理的時候,開啟或關閉緩存后端服務器響應
------------------------------------------------------
proxy_temp_path path [level1 [level2 [level3]]];?
定義從后端服務器接受的臨時文件的存儲路徑,可以為臨時文件定義之多3層子目錄.該參數的值在編譯的時候就可以指定 --http-proxy-temp-path=/var/tmp/nginx/proxy/
proxy_tmp_path /var/tmp/nginx/proxy/ 1 2;
1 表示建立一級子目錄并且目錄名是一個字符
2 表示建立二級子目錄并且目錄名是兩個字符
------------------------------------------------------
proxy_buffers number size;
為每一個連接設置緩沖區的數量為number,每塊緩沖區的大小是size,這些緩沖區保存從被代理服務器讀取的響應,每塊緩沖區的默認等于一個內存也的大小.
------------------------------------------------------
proxy_busy_buffers_size size;
當開啟緩沖響應的功能的時候,在沒有讀取到全部響應的時候,寫換紅達到一定的大小之后,nginx會向客戶端發送響應,該指令就是定義這個值的
-------------------------------------------------------
proxy_max_temp_file_size size;
打開后端服務器響應緩沖之后,如果整個響應的數據不能存儲在內存緩沖中,
那么部分響應的數據可以存儲臨時文件中,整個指令設置臨時文件的最大容量.
如果設置為0表示關閉將后端服務器響應的數據寫入臨時文件中
-------------------------------------------------------
proxy_temp_file_write_size size;
在開啟緩沖后端服務器響應到臨時文件的功能后,設置nginx每次寫數據到臨時文件的大小的限制.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^負載均衡^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
負載均衡 Load Balancing :(后端服務器的健康狀況監測):
upstream name { ... }
定義一個服務器組,而且這些服務器可以監聽在不同的端口.
upstream backend {
server ......
server .....;
.....
}
----------------------------------
server address [params];
定義服務器組中的一臺服務器和其他參數, 注意不能使用http
server 192.168.0.1:80;
params:
weight=N 設定服務器的權重 默認是1
max_fails=N 設定Nginx與服務器通信的嘗試失敗的次數,在fail_timeout這個時間段內,如果失敗的次數達到了這個值,Nginx被認為服務器是不可用的.默認是1
fail_timeout=time 統計失敗次數的時間段,在這個時間段內,服務器失敗的次數達到指定的嘗試次數,服務器就被認為是不可用的.默認值10秒
backup 標記為默認的服務器,就是在所有的后端服務器down機之后才啟用的服務器.
------------------------------------------
ip_hash 指定負載均衡的算法 這個指令可以確保來自同一個客戶端的請求定位到同一個服務器.
-----------------------------------------
least_conn 指定負載均衡的算法,最少連接算法默認是weight round robin
---------------------------------------
upstream backend {
server 192.168.0.1 weight=1 fail_timeout=10 max_fails=2;
server 192.168.0.2 weight=1 fail_timeout=10 max_fails=2; ?.......
server 127.0.0.1 backup;
proxy_pass URL 設置后端服務器的協議和地址.
請求的URI按照下面的規則傳送給后端的服務器:
1 如果proxy_pass使用了uri,當傳送請求到后端服務器時候,規范化之后的請求路徑與配置中的路徑的匹配部分將被替換為指令定義的URI.
location /name/ {
proxy_pass http://192.168.0.1/emna/;
}
http://www.magedu.com/name/index.html =>?
http://www.magedu.com/emna/index.html
? location /name/ {
proxy_pass http://192.168.0.1/; 注意后面的/
}
http://www.magedu.com/name/index.html =>?
http://192.168.0.1/index.html
2 如果proxy_pass沒有使用URI,傳送到后端服務器的請求的URI就是客戶端發起的請求的URI,如果nginx內部改變了請求URI,那么傳送到URI是nginx改變之后的完整的URI.
location /name/ {
proxy_pass http://192.168.0.1;
}
http://www.magedu.com/name/index.html =>?
http://192.168.0.1/name/index.html
注意: 在一下的情況中,proxy_pass指令是不能添加自己的URI.
1 location 匹配路徑的時候使用了正則表達式.
location ~ ^/name {
proxy_pass http://192.168.0.1;
}?
2 在代理的過程中使用了rewrite指令.
location /name {
rewrite ^/name/(.*) /age/$1?
proxy_pass http://192.168.0.1;
}
---------------------------------------
proxy_set_header name value; 允許重新定義或者添加發往后端服務器的請求頭信息.
默認情況下有2個參數的值會改變:
proxy_set_header Host $proxy_host;
proxy_set_header Connection close;
注意:如果我們定義的值為空,那么是不會傳遞給后端的服務器的.
proxy_set_header Host '';
----------------------------------------
proxy_redirect default;
proxy_redirect off;
proxy_redirect redirect replacement;
對后端服務器響應中的Location: 和 Refresh:響應頭替換文本.
proxy_redirect off; 表示不做處理
proxy_redirect http://localhost/two/ http://localhost/one/;
如果Location: http://localhost/two/some/uri將被改變為:
? ? Location: http://localhost/one/some/uri
proxy_redirect default;使用location 和 proxy_pass執行的參數做匹配:
location /one/ {
proxy_pass http://localhost/two/;
proxy_redirect default;
}
location /one/ {
proxy_pass http://localhost/two/;
proxy_redirectr http://localhost/two/ http://localhost/one/;
}
以上2個是等價的自己理解.
-----------------------------------------------------
proxy_send_timeout time;
定義向后端服務器傳輸請求的超時時間,該時間表示相鄰兩次寫操作之間的最長的時間間隔,而不是整個請求的時間,如果后端服務器在超時時間段內沒有接受到任何數據,那么連接斷開.
-----------------------------------------------------
proxy_read_timeout time;
定義從后端服務器讀取響應的超時,該時間是指相鄰兩次讀操作之間的最大的時間間隔,而不是整個響應傳輸完成的時間,如果后端服務器在超時時間段內沒有傳輸任何的數據,那么連接關閉.
-----------------------------------------------------
proxy_connect_timeout time;
設置與后端服務器建立連接的超時時間,應該注意這個時間一般不會超過75s
------------------------------------------------------
proxy_buffering on | off; 代理的時候,開啟或關閉緩存后端服務器響應
------------------------------------------------------
proxy_temp_path path [level1 [level2 [level3]]];?
定義從后端服務器接受的臨時文件的存儲路徑,可以為臨時文件定義之多3層子目錄.該參數的值在編譯的時候就可以指定 --http-proxy-temp-path=/var/tmp/nginx/proxy/
proxy_tmp_path /var/tmp/nginx/proxy/ 1 2;
1 表示建立一級子目錄并且目錄名是一個字符
2 表示建立二級子目錄并且目錄名是兩個字符
------------------------------------------------------
proxy_buffers number size;
為每一個連接設置緩沖區的數量為number,每塊緩沖區的大小是size,這些緩沖區保存從被代理服務器讀取的響應,每塊緩沖區的默認等于一個內存也的大小.
------------------------------------------------------
proxy_busy_buffers_size size;
當開啟緩沖響應的功能的時候,在沒有讀取到全部響應的時候,寫換紅達到一定的大小之后,nginx會向客戶端發送響應,該指令就是定義這個值的
-------------------------------------------------------
proxy_max_temp_file_size size;
打開后端服務器響應緩沖之后,如果整個響應的數據不能存儲在內存緩沖中,
那么部分響應的數據可以存儲臨時文件中,整個指令設置臨時文件的最大容量.
如果設置為0表示關閉將后端服務器響應的數據寫入臨時文件中
-------------------------------------------------------
proxy_temp_file_write_size size;
在開啟緩沖后端服務器響應到臨時文件的功能后,設置nginx每次寫數據到臨時文件的大小的限制.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^負載均衡^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
負載均衡 Load Balancing :(后端服務器的健康狀況監測):
upstream name { ... }
定義一個服務器組,而且這些服務器可以監聽在不同的端口.
upstream backend {
server ......
server .....;
.....
}
----------------------------------
server address [params];
定義服務器組中的一臺服務器和其他參數, 注意不能使用http
server 192.168.0.1:80;
params:
weight=N 設定服務器的權重 默認是1
max_fails=N 設定Nginx與服務器通信的嘗試失敗的次數,在fail_timeout這個時間段內,如果失敗的次數達到了這個值,Nginx被認為服務器是不可用的.默認是1
fail_timeout=time 統計失敗次數的時間段,在這個時間段內,服務器失敗的次數達到指定的嘗試次數,服務器就被認為是不可用的.默認值10秒
backup 標記為默認的服務器,就是在所有的后端服務器down機之后才啟用的服務器.
------------------------------------------
ip_hash 指定負載均衡的算法 這個指令可以確保來自同一個客戶端的請求定位到同一個服務器.
-----------------------------------------
least_conn 指定負載均衡的算法,最少連接算法默認是weight round robin
---------------------------------------
upstream backend {
server 192.168.0.1 weight=1 fail_timeout=10 max_fails=2;
server 192.168.0.2 weight=1 fail_timeout=10 max_fails=2; ?.......
server 127.0.0.1 backup;
總結
以上是生活随笔為你收集整理的Nginx的反向代理 和 负载均衡的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenSSL(加密方式,加密算法,自签
- 下一篇: web_reverse_proxy --