Nginx正向代理和反向代理

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

 一、正向代理


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正向代理和反向代理” 的相關文章

meter元素顏色,可以使用CSS樣式來設置顏色

meter元素顏色,可以使用CSS樣式來設置顏色

meter元素可以用於表示已知範圍內的度量值,可以使用CSS樣式來設置顏色。具體來說,可以使用 <code>::-webkit-meter-optimum-value, ::-moz-meter-bar, ::-webkit-meter-bar</code> 偽元素來設置顏色…

javascript怎麼改變字體顏色文本顏色代碼

javascript怎麼改變字體顏色文本顏色代碼

這裏是一個簡單的 JavaScript改變文體顏色代碼示例,它會在頁面上創建一個按鈕,點擊該按鈕會使文本顏色發生變化。這段代碼首先在頁面中創建了一個按鈕,然後獲取該按鈕和一個段落元素的引用,接著為按鈕添加了一個事件監聽器,當按鈕被點擊時,段落文本顏色將變成紅色。…

一個簡單的html結婚特效的代碼

一個簡單的html結婚特效的代碼

以下是一個簡單的html結婚特效的代碼:1. 使用html和css定義了一個結婚的基本樣式;2. 分別定義新娘和新郎,並使用background-image設置其背景圖;3. 定義一個心形圖案,並使用animation讓其跳動。…

一個簡單的html大海日出特效的代碼

一個簡單的html大海日出特效的代碼

以下是一個簡單的html大海日出特效的代碼:1. 使用html和css定義了一個大海和太陽的基本樣式;2. 使用animation讓太陽從初始位置向上升起,並且設置好其動畫屬性;3. 設置大海背景漸變和水面的動畫效果。…

星空特效的HTML代碼示例

星空特效的HTML代碼示例

以下是一個星空特效的HTML代碼示例:這個代碼會在頁面背景中生成100個閃爍的星星,使得整個頁面看起來像是夜空中的星空。可以在瀏覽器中運行查看效果。這些代碼可以在瀏覽器中運行並產生相應的星空特效。…

html零基礎入門教程及代碼演示例子

html零基礎入門教程及代碼演示例子

HTML是創建網頁的基礎語言。在互聯網的世界裏,網頁是我們獲取信息和與世界連接的主要途徑之一。因此,學習HTML是設計和制作網頁的重要一步。如果您是一個完全零基礎的人,那麼這份教程可以幫助您快速入門,並開始創建自己的網頁。在這個教程中,我們將探討HTML的基礎語法和標記,以及如何將它們組合在一起來構…