正向代理與反向代理的區別? ? ?
雖然正向代理和反向代理都涉及代理服務器接收客戶端請求并向服務端轉發請求,但它們之間存在一些關鍵的區別:
正向代理:
????????在正向代理中,代理服務器代表客戶端向服務器發送請求,并將服務器端響應返回給客戶端。
客戶端需要配置請求發送至代理服務器,并且服務器不會直接知道客戶端的真實 IP 地址,只能看到代理服務器的 IP 地址。
正向代理通常用于繞過網絡訪問限制、保護客戶端隱私、實現匿名訪問等場景,例如訪問被封鎖的網站或保護內部網絡安全訪問外部網絡,常見的有路由器、防火墻等。
反向代理:
????????在反向代理中,代理服務器代表服務器接收客戶端請求,并將請求轉發給實際提供服務的服務器。代理服務器接收來自客戶端的請求,并決定將請求轉發給哪個后端服務器。
客戶端只知道代理服務器的 IP 地址,不知道提供服務的真實服務器。
反向代理通常用于負載均衡、緩存加速、安全策略、SSL 終結等場景,可以提高網站的性能、可用性和安全性。
總的來說,正向代理是客戶端選擇性使用的代理服務器,而反向代理是提供服務的服務器端使用的代理服務器。區別主要在于代理服務器代表誰和誰向誰轉發請求。
反向代理配置案例:
1、創建好一個訪問頁面
2、、配置反向代理
配置參數詳解:
proxy_pass 表示真是服務器的IP地址,也就是web服務器的IP地址;proxy_set_header Host $http_host; 表示重新定義轉發給web服務器的請求頭部,即在請求頭部添加客戶端真實地址;proxy_set_header X-Real-IP $remote_addr; 表示記錄客戶端真實IP地址proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 表示記錄服務端反向代理服務器的ip地址proxy_connect_timeout 表示反向代理服務器對web服務器發起TCP三次握手的連接超時時間; proxy_send_timeout 表示web服務器給反向代理服務器返回資源過程中的超時時間proxy_read_timeout 表示TCP長連接的超時時間proxy_buffering 表示開啟緩存功能proxy_buffer_size 表示存放響應頭部的緩沖區proxy_buffers 表示內容緩沖區大小proxy_busy_buffers_size 表示用于向客戶端發送資源的緩沖區,反向代理服務器會劃分出一部分用于發送資源的緩沖區;
# proxy_max_temp_file_size 256;表示用于存儲請求頭部的緩沖區,反向代理服務器會將超大的請求頭部在緩沖區內存儲成文件。
proxy_set_header 都是關于修改請求配置。而示例中的配置表示,反向代理服務器將自身ip地址與客戶端的真實IP地址一同添加到請求頭部,,再轉發給web服務器。
注意:nginx配置反向代理服務器之后,nginx不在提供web功能。
測試:通過訪問反向代理服務器IP來訪問web網站。
上圖顯示成功通過反向代理服務器IP訪問web網站,說明反向代理配置已經生效。
????????查看web服務器中的訪問日志,IP地址192.168.40.188在訪問日志中表示客戶端的IP地址。在訪問日志的結尾比平常多一個IP地址,這就是真實客戶端的IP地址,說明IP地址192.168.40.188是一個代理服務器IP地址。之前所以客戶端真實地址在訪問日志中出現,是因為之前對請求頭部信息的修改配置生效,nginx將代理ip地址與客戶端的真實IP地址都寫到了請求頭部中。web服務器收到帶有客戶端的真實ip地址的請求信息,就將客戶端的真實IP地址與代理IP地址一同寫入訪問日志。