什么是反向代理
所謂代理,就是起到一個轉發請求的作用
正向代理

- 正向代理隱藏了真實客戶端,而且請求從一開始它就很明確的知道自己要去訪問哪台服務器
反向代理

- 反向代理隱藏了真實服務端,所以請求一開始不清楚該往哪里轉發的,需要根據配置去解析,然后再定位,轉發。
為什么要使用反向代理?
反向代理分發請求可以平攤單個服務器的壓力
Nginx反向代理的配置語法
反向代理中的常用指令:
proxy_pass
proxy_set_header
proxy_redirect
proxy_pass
該指令用來設置被代理服務器地址,可以是主機名稱、IP地址加端口號形式。
| 語法 | proxy_pass URL; |
|---|---|
| 默認值 | — |
| 位置 | location |
URL:為要設置的被代理服務器地址,包含傳輸協議(http,https://)、主機名稱或IP地址加端口號、URI等要素。
舉例:
proxy_pass http://www.baidu.com;
location /server{}
proxy_pass http://192.168.200.146;
http://192.168.200.146/server/index.html
proxy_pass http://192.168.200.146/;
http://192.168.200.146/index.html
大家在編寫proxy_pass的時候,后面的值要不要加"/"?
接下來通過例子來說明剛才我們提到的問題:
server {
listen 80;
server_name localhost;
location /{
#proxy_pass http://192.168.200.146;
proxy_pass http://192.168.200.146/;
}
}
當客戶端訪問 http://localhost/index.html,效果是一樣的
server{
listen 80;
server_name localhost;
location /server{
#proxy_pass http://192.168.200.146;
proxy_pass http://192.168.200.146/;
}
}
當客戶端訪問 http://localhost/server/index.html
這個時候,第一個proxy_pass就變成了http://localhost/server/index.html
第二個proxy_pass就變成了http://localhost/index.html效果就不一樣了。
proxy_set_header
該指令可以更改Nginx服務器接收到的客戶端請求的請求頭信息,然后將新的請求頭發送給代理的服務器
| 語法 | proxy_set_header field value; |
|---|---|
| 默認值 | proxy_set_header Host $proxy_host; proxy_set_header Connection close; |
| 位置 | http、server、location |
需要注意的是,如果想要看到結果,必須在被代理的服務器上來獲取添加的頭信息。
被代理服務器: [192.168.200.146]
server {
listen 8080;
server_name localhost;
default_type text/plain;
return 200 $http_username;
}
代理服務器: [192.168.200.133]
server {
listen 8080;
server_name localhost;
location /server {
proxy_pass http://192.168.200.146:8080/;
proxy_set_header username TOM;
}
}
訪問測試
proxy_redirect
該指令是用來重置頭信息中的"Location"和"Refresh"的值。
| 語法 | proxy_redirect redirect replacement; proxy_redirect default; proxy_redirect off; |
|---|---|
| 默認值 | proxy_redirect default; |
| 位置 | http、server、location |
為什么要用該指令?
服務端[192.168.200.146]
server {
listen 8081;
server_name localhost;
if (!-f $request_filename){
return 302 http://192.168.200.146;
}
}
代理服務端[192.168.200.133]
server {
listen 8081;
server_name localhost;
location / {
proxy_pass http://192.168.200.146:8081/;
proxy_redirect http://192.168.200.146 http://192.168.200.133;
}
}
》該指令的幾組選項
proxy_redirect redirect replacement;
redirect:目標,Location的值
replacement:要替換的值
proxy_redirect default;
default;
將location塊的uri變量作為replacement,
將proxy_pass變量作為redirect進行替換
proxy_redirect off;
關閉proxy_redirect的功能
反向代理系統調優
反向代理值Buffer和Cache
Buffer翻譯過來是"緩沖",Cache翻譯過來是"緩存"。

總結下:
相同點:
兩種方式都是用來提供IO吞吐效率,都是用來提升Nginx代理的性能。
不同點:
緩沖主要用來解決不同設備之間數據傳遞速度不一致導致的性能低的問題,緩沖中的數據一旦此次操作完成后,就可以刪除。
緩存主要是備份,將被代理服務器的數據緩存一份到代理服務器,這樣的話,客戶端再次獲取相同數據的時候,就只需要從代理服務器上獲取,效率較高,緩存中的數據可以重復使用,只有滿足特定條件才會刪除.
(1)Proxy Buffer相關指令
》proxy_buffering :該指令用來開啟或者關閉代理服務器的緩沖區;
| 語法 | proxy_buffering on|off; |
|---|---|
| 默認值 | proxy_buffering on; |
| 位置 | http、server、location |
》proxy_buffers:該指令用來指定單個連接從代理服務器讀取響應的緩存區的個數和大小。
| 語法 | proxy_buffers number size; |
|---|---|
| 默認值 | proxy_buffers 8 4k | 8K;(與系統平台有關) |
| 位置 | http、server、location |
number:緩沖區的個數
size:每個緩沖區的大小,緩沖區的總大小就是number*size
》proxy_buffer_size:該指令用來設置從被代理服務器獲取的第一部分響應數據的大小。保持與proxy_buffers中的size一致即可,當然也可以更小。
| 語法 | proxy_buffer_size size; |
|---|---|
| 默認值 | proxy_buffer_size 4k | 8k;(與系統平台有關) |
| 位置 | http、server、location |
》proxy_busy_buffers_size:該指令用來限制同時處於BUSY狀態的緩沖總大小。
| 語法 | proxy_busy_buffers_size size; |
|---|---|
| 默認值 | proxy_busy_buffers_size 8k|16K; |
| 位置 | http、server、location |
》proxy_temp_path:當緩沖區存滿后,仍未被Nginx服務器完全接受,響應數據就會被臨時存放在磁盤文件上,該指令設置文件路徑
| 語法 | proxy_temp_path path; |
|---|---|
| 默認值 | proxy_temp_path proxy_temp; |
| 位置 | http、server、location |
注意path最多設置三層。
》proxy_temp_file_write_size:該指令用來設置磁盤上緩沖文件的大小。
| 語法 | proxy_temp_file_write_size size; |
|---|---|
| 默認值 | proxy_temp_file_write_size 8K|16K; |
| 位置 | http、server、location |
通用網站的配置
proxy_buffering on;
proxy_buffer_size 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
根據項目的具體內容進行相應的調節。
