## 接收包體兩種方式
nginx對于客戶端的請求發送給上有服務器是如何做的?
1. 接收完全部包體再發送;
2. 一邊接收,一邊發送;
## 相關指令
1. proxy_request_buffering;
2. client_max_body_size;
3. client_max_buffer_size;
## proxy_request_buffering
語法:
```
proxy_request_buffering on | off
```
默認值:
```
proxy_request_buffering on; //設為on,nginx完全接收包體后再發送給上游服務器;
```
上下文:
```
http | server | location
```
### 開啟(on)的情況:
設為off的話,nginx需要和上游服務器不停的建立大量的連接和請求,對于上游服務器的壓力較大;
1. 對吞吐量要求高;
2. 上游服務并發處理能力低;
### 關閉的情況
如果將buffering關閉的話,那么對于客戶端的響應速度就會更快,并且減少nginx的磁盤IO,因為不需要將請求緩存起來;并且buffering的容量是有限的,當超過這個容量后,nginx會將請求存儲到磁盤上;
1. 更及時的響應;
2. 減少nginx磁盤IO;
## client_max_body_size
這個決定了nginx可以處理的請求體的大小,這個參數需要特別注意,如果需要上傳文件或者圖片需要將這個參數調大,否則大于這個體量無法上傳的;
語法:
```
client_max_body_size size;
```
默認值:
```
client_max_body_size 1M;
```
上下文:
```
http | server | location
```
## client_max_buffer_size
這個就是對應前面的buffering的大小;
語法:
```
client_max_buffer_size size;
```
默認值:
```
client_max_buffer_size 8k | 16k;
```
上下文:
```
http | server | location
```
## 場景實踐
請求體小于client_max_body_size:

請求體大于client_max_body_size:

請求體小于client_max_body_size但是使用client_body_temp_path指定了臨時存儲目錄:

## client_body_in_single_buffer
如果是on,那么請求體會存放在緩沖區連續的區域;這樣讀取會更快;
語法:
```
client_body_in_single_buffer on | off;
```
默認值:
```
client_body_in_single_buffer off;
```
上下文:
```
http | server | location
```
## client_body_temp_path
當請求體大于設定的請求體的容量,那么就會存放到設定的目錄中;
語法:
```
client_body_temp_path path [level1] [level2] [level3];
```
默認值:
```
client_body_temp_path client_body_temp;
```
上下文:
```
http | server | location
```
## client_body_in_file_only
當這個值設為on,不管請求體大于還是小于緩沖區都會存放到磁盤上;請求完成后不刪除;如果選擇clean,也會存放磁盤上,但是請求完成后會刪除;
語法:
```
client_body_in_file_only on | clean | off;
```
默認值:
```
client_body_in_file_only off;
```
上下文:
```
http | server | location
```
## client_body_timeout
當客戶端和nginx建立連接后長時間沒有發送請求體,就會關閉連接;
語法:
```
client_body_timeout time;
```
默認值:
```
client_body_timeout 60s;
```
上下文:
```
http | server | location
```
## 實例
```
location /receive/ {
proxy_pass http://back_end;
client_max_body_size 100k; //客戶端最大請求體大小
client_body_buffer_size 250k;
client_body_temp_path test_body_path; //配置完成后nginx會自動創建test_body_path這個文件夾
client_body_in_file_only on;
client_body_in_sigle_buffer on;
proxy_request_buffering on;
client_body_timeout 30;
}
```
- NginX簡述
- 什么是中間件
- NginX概述
- 選擇NginX的理由
- NginX環境安裝
- 四項確認
- NginX安裝
- 安裝
- 安裝目錄詳解
- 編譯參數詳解
- Nginx主目錄
- 基于NginX的中間件架構
- Nginx日志類型
- Nginx變量
- 常見NginX中間架構
- 靜態資源web服務
- 概述
- 靜態資源服務場景-CDN
- 瀏覽器緩存原理
- 跨站訪問
- 防盜鏈
- 代理服務
- 概述
- 配置語法
- 其他配置語法
- 負載均衡調度器SLB
- 概述
- 配置
- 動態緩存
- ====分割線====
- Nginx初體驗
- nginx簡介
- 請求全流程
- nginx核心優勢
- 安裝第一個rpm包nginx
- Nginx進程結構與熱部署
- 進程結構
- 信號量管理nginx
- 配置文件重載原理真相
- nginx熱部署
- nginx模塊化管理機制
- nginx編譯安裝的配置參數
- nginx配置文件結構
- 虛擬主機的分類
- Nginx核心指令基礎應用
- main段核心參數用法
- events段核心參數用法
- HTTP段核心參數用法
- server_name
- server_name指令用法優先級
- root和alias的區別
- location的基礎用法
- location指令中匹配規則的優先級
- 深入理解location中URL結尾的反斜線
- stub_status模塊用法
- Nginx應用進階
- connection和request
- 對connection做限制的limit_conn模塊
- 對request處理速率做限制的limit_req模塊
- 限制特定IP或網段訪問的access模塊
- 限制特定用戶訪問的auth_basic模塊
- 基于HTTP響應狀態碼做權限控制的auth_request模塊
- rewrite模塊
- return指令
- rewrite指令
- return和rewrite指令執行順序
- if指令
- autoindex模塊用法
- Nginx的變量
- 變量分類
- TCP連接相關變量
- 發送HTTP請求變量
- 處理HTTP請求變量
- 反向代理
- 基礎原理
- 動靜分離
- nginx作為反向代理支持的協議
- 用于定義上游服務的upstream模塊
- upstream模塊指令用法詳解
- 配置一個可用的上游應用服務器
- proxy_pass常見誤區
- 代理場景下nginx接受用戶請求包體的處理方式
- 代理場景下Nginx更改發往上游的用戶請求
- 代理場景下Nginx與上游服務建立連接細節
- 基于fastcgi的反向代理
- 負載均衡
- 負載均衡基礎
- 實現nginx對上游服務負載均衡
- 負載均衡hash算法
- 負載均衡ip_hash算法
- 負載均衡最少連接數算法
- 針對上游服務器返回異常時的容錯機制
- Nginx緩存
- 緩存基礎
- 緩存相關指令
- 緩存用法配置示例
- 配置nginx不緩存上游服務特定內容
- 緩存失效降低上游壓力機制1-合并源請求
- 緩存失效降低上游壓力機制2-啟用陳舊緩存
- 第三方清除模塊ngx_cache_purge介紹
- ngx_cache_purge用法配置示例
- Nginx和HTTPS
- https原理基礎
- https如何解決信息被竊聽的問題
- https如何解決報文被篡改以及身份偽裝問題
- 配置私有CA服務器
- 組織機構向CA申請證書及CA簽發證書
- 深入Nginx架構
- Nginx性能優化