proxy代理功能
正向代理
什么是正向代理?
正向代理(forward proxy),一個位于客戶端和原始服務器之間的服務器。
工作原理
- 為了從原始服務器獲取內容,客戶端向代理發送一個請求并指定目標(即原始服務器);
- 然后代理服務器向原始服務器轉發請求并獲取內容返回給客戶端,此時客戶端才能使用正向代理。
示意圖
備注
在系統運維工作中很難使用到nginx的正向代理,此處忽略正向代理的學習。
反向代理
什么是反向代理?
反向代理(reverse proxy),一個位于服務端的服務器。
工作原理
- 代理服務端接收來自網絡上的連接請求;
- 然后將請求轉發給內部網絡的服務端;
- 并從服務端獲取結果返回給請求的客戶端;
示意圖
正向代理和反向代理的區別
- 位置不同,正向代理架設在客戶端和服務端直接,而反向代理架設在服務端。
- 代理對象不同,正向代理是代理的客戶端,服務器不知道實際發起請求的客戶端是誰;而反向代理是代理的服務端,客戶端不知道實際提供服務的服務端是誰。
Nginx反向代理應用
模塊名稱
ngx_http_proxy_module
常見語法
- 代理設置
- proxy_pass URL:代理后端服務器URL
- 適用范圍:location
- 緩沖區設置
- proxy_buffering on | off:緩沖區的開啟與關閉
- 適用范圍:http、server、location
- 緩沖區大小設置
- proxy_buffer_size size:設置緩沖區的大小
- 適用范圍:http、server、location
- 緩沖區數量設置
- proxy_buffers number size:緩沖區數量大小
- 適用范圍:http、server、location
- 忙碌的緩沖區大小設置
- proxy_busy_buffers_size size:設置忙碌的緩沖區大小
- 適用范圍:http、server、location
- 頭信息設置
- proxy_set_header field value:設置真實客戶端地址
- 適用范圍:http、server、location
- 連接超時時間設置
- proxy_connect_timeout time:連接超時設置
- 適用范圍:http、server、location
- 讀取超時時間設置
- proxy_read_timeout:讀取超時設置
- 適用范圍:http、server、location
- 發送超時時間設置
- proxy_send_timeout timeout:發送超時設置
- 適用范圍:http、server、location
應用反向代理
注意:使用的yum的Nginx服務方式實驗。
- 配置網站Nginx服務(服務端)
路徑:/etc/nginx/conf.d/wangmingqu.conf
地址:192.168.131.129
server {auth_basic "賬號密碼登錄";auth_basic_user_file /etc/nginx/conf.d/.passwd;listen 80;server_name wang.wangmingqu.com;charset utf-8;location / {root /www/wangmingqu/;index index.html index.htm;}}
測試數據
mkdir -p /www/wangmingqu/
echo "后端提供服務主機" >> /www/wangmingqu/index.html
echo "服務器主機的地址" >> /www/wangmingqu/index.html
- 配置代理服務(即proxy端)
路徑:/etc/nginx/conf.d/nginx_proxy.conf
地址:192.168.131.130
server {listen 80;server_name localhost;location / {proxy_pass http://wang.wangmingqu.com:80;proxy_redirect default;proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_connect_timeout 60;proxy_send_timeout 60;proxy_read_timeout 60;proxy_buffering on;proxy_buffer_size 32k;proxy_buffers 4 128k;proxy_busy_buffers_size 256k;proxy_max_temp_file_size 256k;}error_page 500 502 503 504 /50x.html;location = /50x.html {root /usr/share/nginx/html;}}
- 訪問測試
nginx -t
systemctl reload nginx
- 觀察日志
可以看到最后一個參數顯示了客戶端的真實IP
192.168.131.130 - wangmingqu [18/Jan/2024:22:00:26 +0800] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" "192.168.131.1"
- 代理配置詳解
代理設置:
proxy_pass http://wang.wangmingqu.com:80;
#代理后端web服務器配置;
#語法格式:proxy_pass URL;
#指定要代理的服務端的協議、地址、端口和URL;
#URL設置方式:http://localhost:80/url/、http://127.0.0.1:80/url/
#可配置區域:location
proxy_redirect default;
#修改web服務器返回的響應頭中的location頭域跟refresh頭域數值;
#語法格式:proxy_redirect [default|off;redirect replacement]
#默認配置:proxy_redirect default;即在轉發時使用默認端口
#可配置區域:http、server、location
客戶端地址設置:
proxy_set_header Host $http_host;
#語法格式:proxy_set_header field value;
#默認設置:proxy_set_header Host $http_host;
#可配置區域:http、server、location
#轉發時是否設置http頭部
#如果web服務器設置了多個虛擬主機,那么必須配置這一項,如果不配置那么只顯示最靠前的站點,按照字母a到z排序。
proxy_set_header X-Real-IP $remote_addr;
#轉發時是否添加真實主機的IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#客戶端通過代理訪問后端服務,后端服務通過該變量獲取客戶端的真實IP
超時設置:
proxy_connect_timeout 60;
#語法格式:proxy_connect_timeout 超時時間;
#可配置區域:http、server、location
#Nginx代理與后端服務器連接超時時間
#連接超時設置。
proxy_send_timeout 60;
#語法格式:proxy_send_timeout 超時時間;
#可配置區域:http、server、location
#Nginx代理等待后端服務器的響應時間
#發送超時設置。
proxy_read_timeout 60;
#語法格式:proxy_read_timeout 超時時間;
#可配置區域:http、server、location
#后端服務器數據回傳給Nginx代理的超時時間
#讀取超時設置。
緩存設置:
proxy_buffering on;
#啟用緩沖區設置
#可配置區域:http、server、location
proxy_buffer_size 32k;
#設置Nginx代理保存用戶頭信息的緩沖區大小
#可配置區域:http、server、location
proxy_buffers 4 128k;
#設置緩沖區文件個數及大小
#可配置區域:http、server、location
proxy_busy_buffers_size 256k;
proxy_max_temp_file_size 256k;
proxy緩存功能
簡介
什么是代理緩存?
在代理服務器上開啟的緩存,主要用于減少后端服務器的壓力。
模塊名稱
代理緩存應用
后端服務器
路徑:/etc/nginx/conf.d/wangmingqu.conf
地址:192.168.131.129
server {listen 80;server_name wang.wangmingqu.com;charset utf-8;location / {root /www/wangmingqu/;index index.html index.htm;}}
代理服務器
- 子配置文件
路徑:/etc/nginx/conf.d/default.conf
地址:192.168.131.130
#創建緩存存放目錄
mkdir -p /www/nginx_proxy_cache/wangmingqu/
proxy_cache_path /www/nginx_proxy_cache/wangmingqu/ levels=1:2 keys_zone=proxy_wang_cache:10m max_size=10g inactive=60m use_temp_path=off;server {listen 80;server_name locathost;location / {proxy_pass http://wang.wangmingqu.com:80;proxy_redirect default;proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_connect_timeout 60;proxy_send_timeout 60;proxy_read_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_cache proxy_wang_cache;proxy_cache_valid 200 304 12h;proxy_cache_valid any 10m;proxy_cache_key $host$uri$is_args$args;add_header Nginx-Cache "$upstream_cache_status";proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;}
}
- 配置文件解釋
proxy_cache_path /www/nginx_proxy_cache/wangmingqu/ lavels=1:2 keys_zone=proxy_wang_cache:10m max_size=10g inactive=60m use_temp_path=off;
- proxy_cache_path:聲明代理緩存路徑信息
- /www/nginx_proxy_cache/wangmingqu/:緩存數據存放路徑
- lavels=1:2:緩存時使用幾級目錄存儲,此處為二級目錄存儲
- keys_zone=proxy_wang_cache:10m:定義一個名字叫proxy_wang_cache的緩存規則,此緩存區規則的大小為10m
- max_size=10g:定義最大的緩存空間大小為10G
- inactive=60m:不活躍的緩存60分鐘后會被清除
- use_temp_path=off:關閉用戶臨時路徑的使用
proxy_cache proxy_wang_cache;
- 引用定義的緩存配置
proxy_cache_valid 200 304 12h;
- 定義狀態碼為200、304的數據緩存12個小時
proxy_cache_valid any 10m;
- 定義其他狀態的數據緩存10分鐘
proxy_cache_key h o s t host hosturi i s a r g s is_args isa?rgsargs;
- 在存儲用戶信息
add_header Nginx-Cache “$upstream_cache_status”;
- 緩存狀態返回給客戶端
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
- 當出現500、502、503、504的錯誤碼時,代理服務會跳過此后端服務器,并將請求發送到其他后端服務器
- 驗證緩存服務
nginx -t
systemctl reload nginx
訪問結果
緩存目錄