代理服務簡介
什么是代理服務
- 代理-代理辦理(代理理財、代理收貨、代理購物等等)。
HTTP請求沒有代理服務的模型圖
HTTP請求具有代理服務的模型圖
代理分類
- 正向代理
- 反向代理
正向代理
- 當局域網不能上網時,可以在瀏覽器設置正向代理滿足上網要求
- 當我們想通過翻牆訪問國外網站查詢資料,可以在瀏覽器設置正向代理
- 當服務器只允許某個端的IP訪問(比如googe),所以我們需要請求運行訪問的那個客戶端,在讓其幫我們轉發請求
正向代理模型圖
反向代理
- 服務端有很多工程模塊的時候,需要通過Nginx代理實現流量的分發
反向代理模型圖
反向代理模型圖解釋:
- 客戶端需要自己去請求DNS獲取服務端地址;
- 代理是為服務端服務的;
- 紅色虛線表示防火牆;
- 配置在服務端,分發客戶端請求到不同的服務端
- 主要用於服務器集群分布式部署的情況下,反向代理隱藏了服務器的信息
代理區別
- 區別在於形式上服務的對象不一樣
- 正向代理代理的對象是客戶端,為客戶端服務
- 反向代理代理的對象是服務端,為服務端服務
代理模式和模塊介紹
Nginx可支持的代理協議
常見的Nginx作為反向代理支持的協議
反向代理模式與Nginx代理模塊
常見的Nginx作為正向代理支持的協議
注意:
- 不能支持使用HTTPS協議
- Nginx使用HTTP協議作為正向代理的協議
- Nginx使用正向代理范圍比較窄
nginx 反向代理
代理服務proxy_pass配置語法
- Syntax: proxy_pass
URL
; - Default: —
- Context:
location
,if in location
,limit_except
反向代理配置場景模擬
假設有兩個服務一個對外暴露,一個不對外暴露只能內部訪問,對外暴露的端口是80,在內部訪問的端口是8080,通過訪問對外暴露的80服務來訪問8080服務
(1)創建兩個HTML靜態資源文件
http_proxy.html文件
<h1>Welcome to http_proxy!!!!</h1>
http_proxy_redirect.html
<h1>Welcome to http_proxy_redirect_81!!!!</h1>
(2) 編輯location
配置對外暴露的代理
server { listen 80; server_name www.zhangbiao.com; location ~ /test_proxy.html$ { proxy_pass http://127.0.0.1:8080; } }
內部才能訪問的服務
server { listen 8080; server_name 127.0.0.1; location / { root /opt/app/code2; index http_proxy_redirect.htm; }
Nginx作為代理服務_代理配置語法補充
proxy-緩沖區
- Syntax: proxy_buffering on | off;
- Default: proxy_buffering on;
- Context: http, server, location
擴展:
proxy_buffer_size-設置緩沖區大小(內存頁大小)
proxy_buffers-設置緩沖區數量和大小(內存頁數量和大小)
proxy_busy_buffers_size-設置最大緩沖區大小
proxy-重定向
- Syntax: proxy_redirect default; proxy_redirect off; proxy_redirect redirect replacement;
- Default: proxy_redirect default;
- Context: http, server, location
proxy-頭信息
- Syntax: proxy_set_header field value;
- Default: proxy_set_header Host $proxy_host; proxy_set_header Connection close;
- Context: http, server, location
擴展:
proxy_hide_header-設置隱藏頭信息字段
proxy_set_body-設置請求體返回信息
proxy-超時
- Syntax: proxy_connect_timeout time;
- Default: proxy_connect_timeout 60s;
- Context: http, server, location
擴展:
proxy_read_timeout-從代理服務器讀取響應的超時時間
proxy_send_timeout-設置將請求傳輸到代理服務器的超時時間
代理配置及配置規范
代理通用配置
location / { proxy_pass http://127.0.0.1:8080; include proxy_params; }
proxy_params
proxy_redirect default; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_connect_timeout 30; proxy_send_timeout 60; proxy_read_timeout 60; proxy_buffer_size 32k; proxy_buffering on; proxy_buffers 4 128k; proxy_busy_buffers_size 256k; proxy_max_temp_file_size 256k;
代理配置詳解:
proxy_redirect default;
- 沒有重定向就配置成默認,除非后端返回301情況下設置成具體重定向地址
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
- 設置字段重新定義或附加到傳遞給代理服務器的請求頭
proxy_connect_timeout 30;
- 設置代理連接超時時間
proxy_read_timeout 60;
- 設置從代理服務器讀取響應的超時時間
proxy_send_timeout 60;
- 設置向代理服務器發送請求的超時時間
proxy_buffering on;
- 設置啟用或禁用來自代理服務器的響應緩沖
proxy_buffer_size 32k;
- 設置用於讀取從代理服務器接收的響應的第一部分的緩沖區的大小
proxy_buffers 4 128k
- 設置用於從代理服務器讀取響應的緩沖區的數量和大小,用於單個連接。
proxy_busy_buffers_size 256k;
- 設置當啟用來自代理服務器的響應緩沖時,限制可能忙於向響應客戶端發送響應的緩沖區的總大小,而響應尚未完全讀取。
proxy_max_temp_file_size 256k;
- 設置當啟用來自代理服務器的響應緩沖,並且整個響應不適合proxy_buffer_size和proxy_buffers指令設置的緩沖區時,響應的一部分可以保存到臨時文件中。 該指令設置臨時文件的最大大小。 一次寫入臨時文件的數據大小由proxy_temp_file_write_size指令設置。
location / { index index.jsp; proxy_pass http://hello; #在這里設置一個代理,和upstream的名字一樣 #以下是一些反向代理的配置可刪除 proxy_redirect off; #后端的Web服務器可以通過X-Forwarded-For獲取用戶真實IP proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 10m; #允許客戶端請求的最大單文件字節數 client_body_buffer_size 128k; #緩沖區代理緩沖用戶端請求的最大字節數 proxy_connect_timeout 300; #nginx跟后端服務器連接超時時間(代理連接超時) proxy_send_timeout 300; #后端服務器數據回傳時間(代理發送超時) proxy_read_timeout 300; #連接成功后,后端服務器響應時間(代理接收超時) proxy_buffer_size 4k; #設置代理服務器(nginx)保存用戶頭信息的緩沖區大小 proxy_buffers 4 32k; #proxy_buffers緩沖區,網頁平均在32k以下的話,這樣設置 proxy_busy_buffers_size 64k; #高負荷下緩沖大小(proxy_buffers*2) proxy_temp_file_write_size 64k; #設定緩存文件夾大小,大於這個值,將從upstream服務器傳 } }