Nginx正向代理和反向代理

2024-09-30雲端運算與程式碼1580

 一、正向代理


Nginx正向代理和反向代理

1. 定義

   - 正向代理是代理服務器代替客戶端去訪問目標服務器。客戶端向代理服務器發送請求,代理服務器再向目標服務器請求資源,目標服務器將響應返回給代理服務器,最後代理服務器把響應傳遞給客戶端。


2. 特點

   - 隱藏客戶端身份:對於目標服務器來說,它看到的請求來源是代理服務器的IP地址,而不是客戶端的真實IP,從而隱藏了客戶端的身份。例如,在企業內部網絡中,員工通過企業設置的正向代理服務器訪問外部網站時,外部網站看到的是代理服務器的IP。

   - 突破訪問限制:可以用於突破某些網絡訪問限制。比如,在一些地區可能無法直接訪問某些網站,但通過設置正向代理服務器(位於可訪問區域)就可能實現訪問。


3. 配置示例(簡單配置)

server {
    resolver 8.8.8.8; # 設置DNS解析服務器
    listen 8080; # 代理服務器監聽端口
    location / {
        proxy_pass http://$http_host$request_uri; # 將請求轉發到目標服務器
    }
}


二、反向代理


1. 定義

   - 反向代理是代理服務器位於服務器端,接收互聯網用戶的請求,然後將請求轉發到內部網絡中的一個或多個後端服務器,最後將後端服務器的響應返回給互聯網用戶。


2. 特點

   - 隱藏後端服務器信息:對於客戶端來說,只能看到反向代理服務器的IP地址,不知道後端服務器的具體情況,包括數量、IP、架構等。例如,大型網站使用反向代理服務器,用戶訪問網站時並不知道背後有多少臺Web服務器在提供服務。

   - 負載均衡和高可用性:可以實現對後端服務器的負載均衡,將請求合理地分配到多個後端服務器上,提高系統的整體性能和可用性。如果其中一臺後端服務器出現故障,反向代理可以將請求轉發到其他正常的服務器上。


3. 配置示例(簡單配置)

upstream backend_pool {
    server 192.168.1.100; # 後端服務器IP
    server 192.168.1.101;
}
server {
    listen 80;
    location / {
        proxy_pass http://backend_pool; # 將請求轉發到後端服務器組
    }
}


三、正向代理和反向代理的區別


1. 代理位置與服務對象

   - 正向代理:代理服務器位於客戶端一側,主要服務於客戶端。它代替客戶端去訪問外部網絡資源,使得客戶端能夠間接獲取目標服務器的資源。例如,個人用戶使用正向代理來繞過網絡封鎖或者隱藏自己的真實訪問來源。

   - 反向代理:代理服務器位於服務器端,服務於後端服務器集群。它接收來自互聯網的請求,然後將這些請求分發給後端的服務器,最後把後端服務器的響應返回給客戶端。像大型網站,使用反向代理服務器來隱藏後端服務器的架構和分布情況。


2. 請求流向

   - 正向代理:請求的流向是客戶端→正向代理服務器→目標服務器。客戶端明確知道自己要訪問的目標服務器,只是通過正向代理服務器來實現訪問。例如,在企業網絡環境中,員工想要訪問特定的外部網站,請求先到企業的正向代理服務器,再由代理服務器轉發到目標網站服務器。

   - 反向代理:請求的流向是客戶端→反向代理服務器→後端服務器。客戶端只知道反向代理服務器的地址,而不知道具體的後端服務器。當用戶訪問一個網站時,請求先到達反向代理服務器,然後反向代理服務器根據負載均衡算法等將請求轉發到合適的後端服務器。


3. 目的側重

   - 正向代理:側重於保護客戶端的隱私和突破訪問限制。通過隱藏客戶端的真實IP地址,實現一定程度的匿名性,並且可以繞過一些網絡限制,訪問到客戶端原本無法直接訪問的資源。

   - 反向代理:側重於保護後端服務器和提高服務器的性能與可用性。隱藏後端服務器的信息可以防止後端服務器直接暴露在互聯網上,減少安全風險。同時,通過負載均衡等功能提高後端服務器的整體性能,確保在高流量情況下服務的穩定運行。


4. 對客戶端和服務器的可見性

   - 正向代理:目標服務器只能看到代理服務器的IP地址,無法得知客戶端的真實IP地址;而客戶端清楚自己的請求是通過代理服務器轉發到目標服務器的。

   - 反向代理:客戶端只能看到反向代理服務器的IP地址,不清楚後端服務器的具體情況;而後端服務器接收到的請求是來自反向代理服務器的,不知道客戶端的原始請求情況。

分享給朋友:

“Nginx正向代理和反向代理” 的相關文章

HTML 和 CSS 實現網頁導航欄和下拉菜單

HTML 和 CSS 實現網頁導航欄和下拉菜單

以下是一組基於 HTML 和 CSS 實現網頁導航欄和下拉菜單的完整代碼:HTML 代碼:CSS 代碼。該代碼實現了一個簡單的網頁導航欄和下拉菜單,其中 `nav` 表示導航欄,`ul` 表示菜單,`li` 表示菜單項,`a` 表示鏈接。通過設置 CSS 樣式,將菜單項設置為了懸停時出現下拉菜單,同…

一個簡單的html放煙花特效的代碼

一個簡單的html放煙花特效的代碼

以下是一個簡單的html放煙花特效的代碼,代碼說明:1. 使用html和css定義了一個煙花的基本樣式;2. 使用javascript動態生成多個煙花元素,並使用animation讓其展開,模擬煙花爆炸效果;3. 使用setTimeout函數控制煙花爆炸持續時間,並使用setInterval控制煙花…

學習html網頁制作模板代碼怎麼寫

學習html網頁制作模板代碼怎麼寫

HTML網頁制作模板代碼是用來定義網頁結構、內容和樣式的基礎代碼。以下是一個簡單的HTML網頁制作模板代碼的示例。通過這個模板代碼,你可以定義一個基本的網頁結構,以及樣式和導航等元素,讓你的網頁更加美觀和易於導航。通過這個適應式的模板代碼,你的網頁能夠在不同設備的屏幕上具有更好的用戶體驗,適應不同的…

html制作網頁教程技能及代碼例子

html制作網頁教程技能及代碼例子

而HTML作為網頁的標準語言,學習HTML制作網頁的基本技能則是入門網頁制作的必修課程。在這篇文章中,我們將為大家講解一份詳細的HTML制作網頁教程,幫助初學者快速掌握網頁制作技巧,實現自己的網站夢想。以下是一個基礎的HTML網頁制作教程,步驟如下:1. 創建網頁文件 首先,打開一個文本編輯器,如W…

doctype html的作用及代碼例子

doctype html的作用及代碼例子

在 HTML5 中,`<!doctype html>` 是一個非常簡單的聲明,因為已經沒有了其他HTML標準版本或者XML文檔類型定義的支持。此外,這個文檔類型聲明也非常簡短,易於理解和記憶。關於 `<!doctype html>` 的作用:1. 瀏覽器使用指定的文檔類型來解…

在Java編程語言中,類的三種訪問權限的區別

在Java編程語言中,類的三種訪問權限的區別

在Java編程語言中,類可以用public、protected或private關鍵字來指定訪問權限。這三種訪問權限有如下區別:1. public訪問權限:使用public關鍵字表示該類的成員可以被任何其他類訪問。2. protected訪問權限:使用protected關鍵字表示該類的成員可以被該類的…